| /* |
| GLSL conversion of Michael Horsch water demo |
| http://www.bonzaisoftware.com/wfs.html |
| Converted by Mars_999 |
| 8/20/2005 |
| */ |
| uniform vec3 m_lightPos; |
| uniform float m_time; |
| |
| uniform mat4 g_WorldViewProjectionMatrix; |
| uniform mat4 g_WorldViewMatrix; |
| uniform mat4 g_ViewMatrix; |
| uniform vec3 g_CameraPosition; |
| uniform mat3 g_NormalMatrix; |
| |
| attribute vec4 inPosition; |
| attribute vec2 inTexCoord; |
| attribute vec3 inTangent; |
| attribute vec3 inNormal; |
| |
| varying vec4 lightDir; |
| varying vec4 waterTex1; |
| varying vec4 waterTex2; |
| varying vec4 position; |
| varying vec4 viewDir; |
| varying vec4 viewpos; |
| varying vec4 viewLightDir; |
| varying vec4 viewCamDir; |
| |
| |
| //unit 0 = water_reflection |
| //unit 1 = water_refraction |
| //unit 2 = water_normalmap |
| //unit 3 = water_dudvmap |
| //unit 4 = water_depthmap |
| |
| void main(void) |
| { |
| viewpos.x = g_CameraPosition.x; |
| viewpos.y = g_CameraPosition.y; |
| viewpos.z = g_CameraPosition.z; |
| viewpos.w = 1.0; |
| |
| vec4 temp; |
| vec4 tangent = vec4(1.0, 0.0, 0.0, 0.0); |
| vec4 norm = vec4(0.0, 1.0, 0.0, 0.0); |
| vec4 binormal = vec4(0.0, 0.0, 1.0, 0.0); |
| |
| |
| temp = viewpos - inPosition; |
| |
| viewDir.x = dot(temp, tangent); |
| viewDir.y = dot(temp, binormal); |
| viewDir.z = dot(temp, norm); |
| viewDir.w = 0.0; |
| |
| temp = vec4(m_lightPos,1.0)- inPosition; |
| lightDir.x = dot(temp, tangent); |
| lightDir.y = dot(temp, binormal); |
| lightDir.z = dot(temp, norm); |
| lightDir.w = 0.0; |
| |
| vec4 viewSpaceLightPos=g_ViewMatrix*vec4(m_lightPos,1.0); |
| vec4 viewSpacePos=g_WorldViewMatrix*inPosition; |
| vec3 wvNormal = normalize(g_NormalMatrix * inNormal); |
| vec3 wvTangent = normalize(g_NormalMatrix * inTangent); |
| vec3 wvBinormal = cross(wvNormal, wvTangent); |
| mat3 tbnMat = mat3(wvTangent, wvBinormal, wvNormal); |
| |
| temp = viewSpaceLightPos - viewSpacePos; |
| viewLightDir.xyz=temp.xyz*tbnMat; |
| viewLightDir.w = 0.0; |
| |
| temp = -viewSpacePos; |
| viewCamDir.xyz =temp.xyz*tbnMat; |
| viewCamDir.w = 0.0; |
| |
| |
| vec4 t1 = vec4(0.0, -m_time, 0.0,0.0); |
| vec4 t2 = vec4(0.0, m_time, 0.0,0.0); |
| |
| waterTex1 =vec4(inTexCoord,0.0,0.0) + t1; |
| waterTex2 =vec4(inTexCoord ,0.0,0.0)+ t2; |
| |
| position = g_WorldViewProjectionMatrix * inPosition; |
| gl_Position = position; |
| } |