Home | History | Annotate | Download | only in Water
      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