Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Vertex
- #version 400 core
- layout(location = 0) in vec4 in_Position;
- layout(location = 1) in vec2 in_TexCoord;
- out vec2 v_TexCoord;
- void main()
- {
- gl_Position = in_Position;
- v_TexCoord = in_TexCoord;
- }
- -- Fragment
- #version 400 core
- in vec3 gs_Normal[1];
- in vec2 gs_TexCoord[1];
- out vec4 out_Color;
- uniform sampler2D terrain;
- void main()
- {
- out_Color = texture(terrain, gs_TexCoord[0]);
- }
- -- Geometry
- #version 400 core
- uniform transform {
- mat4 MVP;
- mat3 Normal;
- } Transform;
- in vec2 v_TexCoord[1];
- out vec3 gs_Normal[1];
- out vec2 gs_TexCoord[1];
- layout(points) in;
- layout(triangle_strip, max_vertices=24) out;
- void main()
- {
- vec4 point = gl_in[0].gl_Position;
- vec4 points[8];
- vec3 normals[3];
- vec2 texcoords[4];
- points[0] = point - vec4(1, 1, 1, 0);
- points[1] = point - vec4(0, 1, 1, 0);
- points[2] = point - vec4(1, 0, 1, 0);
- points[3] = point - vec4(0, 0, 1, 0);
- points[4] = point - vec4(1, 1, 0, 0);
- points[5] = point - vec4(0, 1, 0, 0);
- points[6] = point - vec4(1, 0, 0, 0);
- points[7] = point - vec4(0, 0, 0, 0);
- normals[0] = vec3(0,0,1);
- normals[1] = vec3(0,1,0);
- normals[2] = vec3(1,0,0);
- texcoords[0] = vec2(v_TexCoord[0].s + 0.0625, v_TexCoord[0].t + 0.0625);
- texcoords[1] = vec2(v_TexCoord[0].s, v_TexCoord[0].t + 0.0625);
- texcoords[2] = vec2(v_TexCoord[0].s + 0.0625, v_TexCoord[0].t);
- texcoords[3] = vec2(v_TexCoord[0].s, v_TexCoord[0].t);
- //Front Face
- gl_Position = Transform.MVP * points[0]; gs_Normal[0] = Transform.Normal * normals[0]; gs_TexCoord[0] = texcoords[0]; EmitVertex();
- gl_Position = Transform.MVP * points[1]; gs_Normal[0] = Transform.Normal * normals[0]; gs_TexCoord[0] = texcoords[1]; EmitVertex();
- gl_Position = Transform.MVP * points[2]; gs_Normal[0] = Transform.Normal * normals[0]; gs_TexCoord[0] = texcoords[2]; EmitVertex();
- gl_Position = Transform.MVP * points[3]; gs_Normal[0] = Transform.Normal * normals[0]; gs_TexCoord[0] = texcoords[3]; EmitVertex();
- EndPrimitive();
- //Back Face
- gl_Position = Transform.MVP * points[4]; gs_Normal[0] = Transform.Normal * normals[0]; gs_TexCoord[0] = texcoords[0]; EmitVertex();
- gl_Position = Transform.MVP * points[5]; gs_Normal[0] = Transform.Normal * normals[0]; gs_TexCoord[0] = texcoords[1]; EmitVertex();
- gl_Position = Transform.MVP * points[6]; gs_Normal[0] = Transform.Normal * normals[0]; gs_TexCoord[0] = texcoords[2]; EmitVertex();
- gl_Position = Transform.MVP * points[7]; gs_Normal[0] = Transform.Normal * normals[0]; gs_TexCoord[0] = texcoords[3]; EmitVertex();
- EndPrimitive();
- //Bottom Face
- gl_Position = Transform.MVP * points[0]; gs_Normal[0] = Transform.Normal * normals[1]; gs_TexCoord[0] = texcoords[0]; EmitVertex();
- gl_Position = Transform.MVP * points[1]; gs_Normal[0] = Transform.Normal * normals[1]; gs_TexCoord[0] = texcoords[1]; EmitVertex();
- gl_Position = Transform.MVP * points[4]; gs_Normal[0] = Transform.Normal * normals[1]; gs_TexCoord[0] = texcoords[2]; EmitVertex();
- gl_Position = Transform.MVP * points[5]; gs_Normal[0] = Transform.Normal * normals[1]; gs_TexCoord[0] = texcoords[3]; EmitVertex();
- EndPrimitive();
- //Top Face
- gl_Position = Transform.MVP * points[2]; gs_Normal[0] = Transform.Normal * normals[1]; gs_TexCoord[0] = texcoords[0]; EmitVertex();
- gl_Position = Transform.MVP * points[3]; gs_Normal[0] = Transform.Normal * normals[1]; gs_TexCoord[0] = texcoords[1]; EmitVertex();
- gl_Position = Transform.MVP * points[6]; gs_Normal[0] = Transform.Normal * normals[1]; gs_TexCoord[0] = texcoords[2]; EmitVertex();
- gl_Position = Transform.MVP * points[7]; gs_Normal[0] = Transform.Normal * normals[1]; gs_TexCoord[0] = texcoords[3]; EmitVertex();
- EndPrimitive();
- //Left Face
- gl_Position = Transform.MVP * points[1]; gs_Normal[0] = Transform.Normal * normals[2]; gs_TexCoord[0] = texcoords[0]; EmitVertex();
- gl_Position = Transform.MVP * points[3]; gs_Normal[0] = Transform.Normal * normals[2]; gs_TexCoord[0] = texcoords[1]; EmitVertex();
- gl_Position = Transform.MVP * points[5]; gs_Normal[0] = Transform.Normal * normals[2]; gs_TexCoord[0] = texcoords[2]; EmitVertex();
- gl_Position = Transform.MVP * points[7]; gs_Normal[0] = Transform.Normal * normals[2]; gs_TexCoord[0] = texcoords[3]; EmitVertex();
- EndPrimitive();
- //Right Face
- gl_Position = Transform.MVP * points[0]; gs_Normal[0] = Transform.Normal * normals[2]; gs_TexCoord[0] = texcoords[0]; EmitVertex();
- gl_Position = Transform.MVP * points[2]; gs_Normal[0] = Transform.Normal * normals[2]; gs_TexCoord[0] = texcoords[1]; EmitVertex();
- gl_Position = Transform.MVP * points[4]; gs_Normal[0] = Transform.Normal * normals[2]; gs_TexCoord[0] = texcoords[2]; EmitVertex();
- gl_Position = Transform.MVP * points[6]; gs_Normal[0] = Transform.Normal * normals[2]; gs_TexCoord[0] = texcoords[3]; EmitVertex();
- EndPrimitive();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement