blob: e6052d8d5c35dfdcc867876379a45572675a607e [file] [log] [blame]
/*
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;
}