Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature may not be available in some browsers.
Всё пытаюсь понять три вещи:XuPuPG написал(а):Что бы добыть gl_FragCoord.z надо написать свою шейдерную программу в моде,и прицепить файлы вершинного и фрагментного шейдеров.а потом в этих файлах добывать всё что тебе надо.в майне уже есть шейдеры,только они на json , типа демонстрация возможностей(лагучие).
public class EventHandlerr
{
private FloatBuffer buffer = BufferUtils.createFloatBuffer(16);
@SubscribeEvent
public void onRenderFogEvent(RenderFogEvent event)
{
GL11.glFog(GL11.GL_FOG_COLOR, createBuffer(0.0F, 20.0F, 0.0F, 1.0F)); // Цвет
GL11.glFogf(GL11.GL_FOG_START, 0.0F); // начало тумана от игрока
GL11.glFogf(GL11.GL_FOG_END, 10.0F); // конец, в данном случае - 10 блоков
}
private FloatBuffer createBuffer(float var1, float var2, float var3, float var4)
{
buffer.clear();
buffer.put(var1).put(var2).put(var3).put(var4);
buffer.flip();
return buffer;
}
}
@EventHandler
public void preInit(FMLPreInitializationEvent event)
{
MinecraftForge.EVENT_BUS.register(new EventHandlerr());
FMLCommonHandler.instance().bus().register(new EventHandlerr());
}
Походу кто-то создает новый буффер каждый тик.Asd1995sse написал(а):Я непонятную муйню с туманом сотворил:silly:, приду с института и скину код с картинками:lol:. загрузка цп 100%:angel:
Где картинки? )))Asd1995sse написал(а):Я непонятную муйню с туманом сотворил:silly:, приду с института и скину код с картинками:lol:. загрузка цп 100%:angel:
private Minecraft mc = Minecraft.getMinecraft();
private IResourceManager resourceManager = Minecraft.getMinecraft().getResourceManager();
@SubscribeEvent
@SideOnly(Side.CLIENT)
public void onRenderFogEvent(RenderFogEvent e) {
try {
ShaderGroup theShaderGroup = new ShaderGroup(this.mc.getTextureManager(), this.resourceManager, this.mc.getFramebuffer(), new ResourceLocation("mist:shaders/post/fog.json"));
theShaderGroup.createBindFramebuffers(this.mc.displayWidth, this.mc.displayHeight);
} catch (JsonException e1) {
System.out.println(1);
}
}
{
"targets": [
"swap"
],
"passes": [
{
"name": "fog",
"intarget": "mist:main",
"outtarget": "swap"
},
{
"name": "fog",
"intarget": "swap",
"outtarget": "mist:main"
}
]
}
{
"blend": {
"func": "add",
"srcrgb": "one",
"dstrgb": "zero"
},
"vertex": "fog",
"fragment": "fog",
"attributes": [ "Position" ],
"samplers": [
{ "name": "DiffuseSampler" }
],
"uniforms": [
{ "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
{ "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }
]
}
// FRAGMENT SHADER FOR FOG
uniform sampler2D color_texture;
uniform vec4 fog_color;
uniform float max_fog_height;
uniform float fog_start;
uniform float fog_end;
varying float height;
void main()
{
// compute factor based on height of fragment in world
float ratio_height = height / max_fog_height;
ratio_height = clamp(ratio_height, 0, 1);
// compute factor based on depth of fragment in camera
float depth_world = gl_FragCoord.z / gl_FragCoord.w;
float ratio_depth = (fog_end - depth_world) / (fog_end – fog_start);
ratio_depth = clamp(ratio_depth, 0, 1);
// combine color of fog and color from texture
float fog_factor = ratio_height * ratio_depth;
mix(texture2D(color_texture, gl_TexCoord[0].st), fog_color, fogFactor);
}
// VERTEX SHADER FOR FOG
uniform mat4 view_matrix;
varying float height;
void main()
{
// get height of vertex in world space
vec4 V_world = gl_ModelViewMatrix * gl_Vertex;
height = v_world.z;
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_Position = gl_ProjectionMatrix * view_matrix * V_world;
}