uniform float Time; uniform float Amp0; uniform float Pd; varying mat3 normalmatrix; varying vec3 MCposition; varying vec3 ECposition; varying vec3 ReflectVector; void main() { const float TWOPI = 2.*3.14159265; MCposition = vec3( gl_Vertex ); ECposition = vec3( gl_ModelViewMatrix * gl_Vertex ); vec3 C0 = vec3( -1., MCposition.y, 0. ); float rad0 = length( MCposition - C0 ); float H0 = -Amp0 * cos( TWOPI*rad0/Pd - TWOPI*Time ); float u = -Amp0 * (TWOPI/Pd) * sin( TWOPI*rad0/Pd - TWOPI*Time ); float v = 1.; float w = 0.; float ang = atan( MCposition.z - C0.z, MCposition.x - C0.x ); float up = dot( vec2(u,w), vec2(cos(ang), -sin(ang)) ); float vp = 1.; float wp = dot( vec2(u,w), vec2(sin(ang), cos(ang)) ); vec3 normal = normalize( vec3( up, vp, wp ) ); // normal = normalize( gl_NormalMatrix * normal ); ReflectVector = reflect( MCposition, normal ); // ReflectVector = normalize( gl_NormalMatrix * ReflectVector ); #ifdef VIEW_INDEPENDENT vec3 normal = normalize( vec3( up, vp, wp ) ); vec3 ReflectVector = reflect( MCposition, normal ); #endif gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; }