CSC3223_Graphics_For_Games_OpenGL_Rasteriser / OpenGLGraphics / displaceTES.glsl
displaceTES.glsl
Raw
#version 400

 layout( quads , cw ) in;

 uniform sampler2D heightMap;

 uniform mat4 modelMatrix;
 uniform mat4 viewMatrix;
 uniform mat4 projMatrix;

 in Vertex { 
 vec2 texCoord;
} IN []; 

 out Vertex { 
 vec2 texCoord;
 } OUT;


 vec3 QuadMixVec3 ( vec3 a , vec3 b, vec3 c, vec3 d ) {
 vec3 p0 = mix(a ,c , gl_TessCoord.x );
 vec3 p1 = mix(b ,d , gl_TessCoord.x );

 return mix( p0 , p1 , gl_TessCoord.y );
}

 vec2 QuadMixVec2 ( vec2 a , vec2 b , vec2 c , vec2 d ) {
 vec2 p0 = mix(a ,c , gl_TessCoord.x );
 vec2 p1 = mix(b ,d , gl_TessCoord.x );

 return mix( p0 , p1 , gl_TessCoord.y );
 }

void main () {
 vec3 combinedPos = QuadMixVec3 ( gl_in [0].gl_Position.xyz ,
 gl_in[1].gl_Position.xyz,
 gl_in[2].gl_Position.xyz,
 gl_in[3].gl_Position.xyz);

 OUT.texCoord = QuadMixVec2 ( IN [0].texCoord, IN[1].texCoord , IN[2].texCoord , IN[3].texCoord );

 vec4 worldPos = modelMatrix * vec4 ( combinedPos , 1);

 float height = texture ( heightMap , OUT.texCoord).x;

 worldPos.y += height * 100;

 gl_Position = projMatrix * viewMatrix * worldPos;
}