Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.77 KB | None | 0 0
  1.  
  2. -- Vertex
  3. #version 400 core
  4.  
  5. layout(location = 0) in vec4 in_Position;
  6. layout(location = 1) in vec2 in_TexCoord;
  7.  
  8. out vec2 v_TexCoord;
  9.  
  10. void main()
  11. {
  12. gl_Position = in_Position;
  13. v_TexCoord = in_TexCoord;
  14. }
  15.  
  16. -- Fragment
  17. #version 400 core
  18.  
  19. in vec3 gs_Normal[1];
  20. in vec2 gs_TexCoord[1];
  21. out vec4 out_Color;
  22. uniform sampler2D terrain;
  23.  
  24. void main()
  25. {
  26. out_Color = texture(terrain, gs_TexCoord[0]);
  27. }
  28.  
  29. -- Geometry
  30. #version 400 core
  31.  
  32. uniform transform {
  33. mat4 MVP;
  34. mat3 Normal;
  35. } Transform;
  36.  
  37.  
  38. in vec2 v_TexCoord[1];
  39. out vec3 gs_Normal[1];
  40. out vec2 gs_TexCoord[1];
  41.  
  42. layout(points) in;
  43. layout(triangle_strip, max_vertices=24) out;
  44.  
  45. void main()
  46. {
  47. vec4 point = gl_in[0].gl_Position;
  48. vec4 points[8];
  49. vec3 normals[3];
  50. vec2 texcoords[4];
  51.  
  52. points[0] = point - vec4(1, 1, 1, 0);
  53. points[1] = point - vec4(0, 1, 1, 0);
  54. points[2] = point - vec4(1, 0, 1, 0);
  55. points[3] = point - vec4(0, 0, 1, 0);
  56. points[4] = point - vec4(1, 1, 0, 0);
  57. points[5] = point - vec4(0, 1, 0, 0);
  58. points[6] = point - vec4(1, 0, 0, 0);
  59. points[7] = point - vec4(0, 0, 0, 0);
  60.  
  61. normals[0] = vec3(0,0,1);
  62. normals[1] = vec3(0,1,0);
  63. normals[2] = vec3(1,0,0);
  64.  
  65. texcoords[0] = vec2(v_TexCoord[0].s + 0.0625, v_TexCoord[0].t + 0.0625);
  66. texcoords[1] = vec2(v_TexCoord[0].s, v_TexCoord[0].t + 0.0625);
  67. texcoords[2] = vec2(v_TexCoord[0].s + 0.0625, v_TexCoord[0].t);
  68. texcoords[3] = vec2(v_TexCoord[0].s, v_TexCoord[0].t);
  69.  
  70. //Front Face
  71.  
  72. gl_Position = Transform.MVP * points[0]; gs_Normal[0] = Transform.Normal * normals[0]; gs_TexCoord[0] = texcoords[0]; EmitVertex();
  73. gl_Position = Transform.MVP * points[1]; gs_Normal[0] = Transform.Normal * normals[0]; gs_TexCoord[0] = texcoords[1]; EmitVertex();
  74. gl_Position = Transform.MVP * points[2]; gs_Normal[0] = Transform.Normal * normals[0]; gs_TexCoord[0] = texcoords[2]; EmitVertex();
  75. gl_Position = Transform.MVP * points[3]; gs_Normal[0] = Transform.Normal * normals[0]; gs_TexCoord[0] = texcoords[3]; EmitVertex();
  76. EndPrimitive();
  77.  
  78. //Back Face
  79. gl_Position = Transform.MVP * points[4]; gs_Normal[0] = Transform.Normal * normals[0]; gs_TexCoord[0] = texcoords[0]; EmitVertex();
  80. gl_Position = Transform.MVP * points[5]; gs_Normal[0] = Transform.Normal * normals[0]; gs_TexCoord[0] = texcoords[1]; EmitVertex();
  81. gl_Position = Transform.MVP * points[6]; gs_Normal[0] = Transform.Normal * normals[0]; gs_TexCoord[0] = texcoords[2]; EmitVertex();
  82. gl_Position = Transform.MVP * points[7]; gs_Normal[0] = Transform.Normal * normals[0]; gs_TexCoord[0] = texcoords[3]; EmitVertex();
  83. EndPrimitive();
  84.  
  85. //Bottom Face
  86. gl_Position = Transform.MVP * points[0]; gs_Normal[0] = Transform.Normal * normals[1]; gs_TexCoord[0] = texcoords[0]; EmitVertex();
  87. gl_Position = Transform.MVP * points[1]; gs_Normal[0] = Transform.Normal * normals[1]; gs_TexCoord[0] = texcoords[1]; EmitVertex();
  88. gl_Position = Transform.MVP * points[4]; gs_Normal[0] = Transform.Normal * normals[1]; gs_TexCoord[0] = texcoords[2]; EmitVertex();
  89. gl_Position = Transform.MVP * points[5]; gs_Normal[0] = Transform.Normal * normals[1]; gs_TexCoord[0] = texcoords[3]; EmitVertex();
  90. EndPrimitive();
  91.  
  92. //Top Face
  93. gl_Position = Transform.MVP * points[2]; gs_Normal[0] = Transform.Normal * normals[1]; gs_TexCoord[0] = texcoords[0]; EmitVertex();
  94. gl_Position = Transform.MVP * points[3]; gs_Normal[0] = Transform.Normal * normals[1]; gs_TexCoord[0] = texcoords[1]; EmitVertex();
  95. gl_Position = Transform.MVP * points[6]; gs_Normal[0] = Transform.Normal * normals[1]; gs_TexCoord[0] = texcoords[2]; EmitVertex();
  96. gl_Position = Transform.MVP * points[7]; gs_Normal[0] = Transform.Normal * normals[1]; gs_TexCoord[0] = texcoords[3]; EmitVertex();
  97. EndPrimitive();
  98.  
  99. //Left Face
  100. gl_Position = Transform.MVP * points[1]; gs_Normal[0] = Transform.Normal * normals[2]; gs_TexCoord[0] = texcoords[0]; EmitVertex();
  101. gl_Position = Transform.MVP * points[3]; gs_Normal[0] = Transform.Normal * normals[2]; gs_TexCoord[0] = texcoords[1]; EmitVertex();
  102. gl_Position = Transform.MVP * points[5]; gs_Normal[0] = Transform.Normal * normals[2]; gs_TexCoord[0] = texcoords[2]; EmitVertex();
  103. gl_Position = Transform.MVP * points[7]; gs_Normal[0] = Transform.Normal * normals[2]; gs_TexCoord[0] = texcoords[3]; EmitVertex();
  104. EndPrimitive();
  105.  
  106. //Right Face
  107. gl_Position = Transform.MVP * points[0]; gs_Normal[0] = Transform.Normal * normals[2]; gs_TexCoord[0] = texcoords[0]; EmitVertex();
  108. gl_Position = Transform.MVP * points[2]; gs_Normal[0] = Transform.Normal * normals[2]; gs_TexCoord[0] = texcoords[1]; EmitVertex();
  109. gl_Position = Transform.MVP * points[4]; gs_Normal[0] = Transform.Normal * normals[2]; gs_TexCoord[0] = texcoords[2]; EmitVertex();
  110. gl_Position = Transform.MVP * points[6]; gs_Normal[0] = Transform.Normal * normals[2]; gs_TexCoord[0] = texcoords[3]; EmitVertex();
  111. EndPrimitive();
  112.  
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement