1 /* 2 GLSL conversion of Michael Horsch water demo 3 http://www.bonzaisoftware.com/wfs.html 4 Converted by Mars_999 5 8/20/2005 6 */ 7 uniform vec3 m_lightPos; 8 uniform float m_time; 9 10 uniform mat4 g_WorldViewProjectionMatrix; 11 uniform mat4 g_WorldViewMatrix; 12 uniform mat4 g_ViewMatrix; 13 uniform vec3 g_CameraPosition; 14 uniform mat3 g_NormalMatrix; 15 16 attribute vec4 inPosition; 17 attribute vec2 inTexCoord; 18 attribute vec3 inTangent; 19 attribute vec3 inNormal; 20 21 varying vec4 lightDir; 22 varying vec4 waterTex1; 23 varying vec4 waterTex2; 24 varying vec4 position; 25 varying vec4 viewDir; 26 varying vec4 viewpos; 27 varying vec4 viewLightDir; 28 varying vec4 viewCamDir; 29 30 31 //unit 0 = water_reflection 32 //unit 1 = water_refraction 33 //unit 2 = water_normalmap 34 //unit 3 = water_dudvmap 35 //unit 4 = water_depthmap 36 37 void main(void) 38 { 39 viewpos.x = g_CameraPosition.x; 40 viewpos.y = g_CameraPosition.y; 41 viewpos.z = g_CameraPosition.z; 42 viewpos.w = 1.0; 43 44 vec4 temp; 45 vec4 tangent = vec4(1.0, 0.0, 0.0, 0.0); 46 vec4 norm = vec4(0.0, 1.0, 0.0, 0.0); 47 vec4 binormal = vec4(0.0, 0.0, 1.0, 0.0); 48 49 50 temp = viewpos - inPosition; 51 52 viewDir.x = dot(temp, tangent); 53 viewDir.y = dot(temp, binormal); 54 viewDir.z = dot(temp, norm); 55 viewDir.w = 0.0; 56 57 temp = vec4(m_lightPos,1.0)- inPosition; 58 lightDir.x = dot(temp, tangent); 59 lightDir.y = dot(temp, binormal); 60 lightDir.z = dot(temp, norm); 61 lightDir.w = 0.0; 62 63 vec4 viewSpaceLightPos=g_ViewMatrix*vec4(m_lightPos,1.0); 64 vec4 viewSpacePos=g_WorldViewMatrix*inPosition; 65 vec3 wvNormal = normalize(g_NormalMatrix * inNormal); 66 vec3 wvTangent = normalize(g_NormalMatrix * inTangent); 67 vec3 wvBinormal = cross(wvNormal, wvTangent); 68 mat3 tbnMat = mat3(wvTangent, wvBinormal, wvNormal); 69 70 temp = viewSpaceLightPos - viewSpacePos; 71 viewLightDir.xyz=temp.xyz*tbnMat; 72 viewLightDir.w = 0.0; 73 74 temp = -viewSpacePos; 75 viewCamDir.xyz =temp.xyz*tbnMat; 76 viewCamDir.w = 0.0; 77 78 79 vec4 t1 = vec4(0.0, -m_time, 0.0,0.0); 80 vec4 t2 = vec4(0.0, m_time, 0.0,0.0); 81 82 waterTex1 =vec4(inTexCoord,0.0,0.0) + t1; 83 waterTex2 =vec4(inTexCoord ,0.0,0.0)+ t2; 84 85 position = g_WorldViewProjectionMatrix * inPosition; 86 gl_Position = position; 87 } 88