1
0
Fork 0

turning reflection into sun or light direction

This commit is contained in:
gral@who.net 2010-09-04 15:25:58 +02:00
parent c6f83b3afd
commit 26e94e0e06
6 changed files with 27 additions and 22 deletions

View file

@ -1,10 +1,8 @@
uniform sampler2D water_normalmap; uniform sampler2D water_normalmap;
uniform sampler2D water_reflection; uniform sampler2D water_reflection;
uniform sampler2D water_refraction; uniform sampler2D water_refraction;
uniform sampler2D water_dudvmap; uniform sampler2D water_dudvmap;
uniform sampler2D water_depthmap; uniform sampler2D water_depthmap;
//uniform vec4 waterColor, waterDepth;
vec4 waterColor = vec4(0.0,0.2,1.0,1.0); vec4 waterColor = vec4(0.0,0.2,1.0,1.0);
vec4 waterDepth = vec4(0.0,0.2,1.0,1.0); vec4 waterDepth = vec4(0.0,0.2,1.0,1.0);
@ -14,6 +12,7 @@ varying vec4 waterTex1; //moving texcoords
varying vec4 waterTex2; //moving texcoords varying vec4 waterTex2; //moving texcoords
varying vec4 waterTex3; //for projection varying vec4 waterTex3; //for projection
varying vec4 waterTex4; //viewts varying vec4 waterTex4; //viewts
varying float fogCoord;
//unit 0 = water_reflection //unit 0 = water_reflection
//unit 1 = water_refraction //unit 1 = water_refraction
@ -33,6 +32,8 @@ const vec4 ofive = vec4(0.5,0.5,0.5,1.0);
const float exponent = 64.0; const float exponent = 64.0;
float fogFactor = exp(-gl_Fog.density * gl_Fog.density * fogCoord * fogCoord);
vec4 lightTS = normalize(waterTex0); vec4 lightTS = normalize(waterTex0);
vec4 viewt = normalize(waterTex4); vec4 viewt = normalize(waterTex4);
vec4 disdis = texture2D(water_dudvmap, vec2(waterTex2 * tscale)); vec4 disdis = texture2D(water_dudvmap, vec2(waterTex2 * tscale));
@ -68,7 +69,7 @@ wdepth = vec4(pow(wdepth.x, 4.0));
vec4 invdepth = 1.0 - wdepth; vec4 invdepth = 1.0 - wdepth;
//calculate specular highlight //calculate specular highlight
vec4 vRef = normalize(reflect(-lightTS, vNorm)); vec4 vRef = normalize(reflect(lightTS, vNorm));
float stemp =max(0.0, dot(viewt, vRef) ); float stemp =max(0.0, dot(viewt, vRef) );
stemp = pow(stemp, exponent); stemp = pow(stemp, exponent);
vec4 specular = vec4(stemp); vec4 specular = vec4(stemp);
@ -87,5 +88,10 @@ refl *= fres;
//add reflection and refraction //add reflection and refraction
tmp = refr + refl; tmp = refr + refl;
gl_FragColor = tmp + specular; if(gl_Fog.density == 1.0)
fogFactor=1.0;
vec4 finalColor = tmp + specular;
gl_FragColor = mix(gl_Fog.color,finalColor, fogFactor);
} }

View file

@ -1,48 +1,47 @@
varying vec4 waterTex0; varying vec4 waterTex0;
varying vec4 waterTex1; varying vec4 waterTex1;
varying vec4 waterTex2; varying vec4 waterTex2;
varying vec4 waterTex3; varying vec4 waterTex3;
varying vec4 waterTex4; varying vec4 waterTex4;
uniform vec4 viewpos, lightpos; uniform float osg_SimulationTime;
uniform float time, time2; varying vec3 lightVec;
//unit 0 = water_reflection varying float fogCoord;
//unit 1 = water_refraction varying vec4 ecPosition;
//unit 2 = water_normalmap
//unit 3 = water_dudvmap
//unit 4 = water_depthmap
void main(void) void main(void)
{ {
vec4 mpos, temp;
lightVec = normalize(gl_LightSource[0].position.xyz);
ecPosition = gl_ModelViewMatrix * gl_Vertex;
vec4 lightpos = vec4(lightVec, 1.0);
vec4 temp;
vec4 tangent = vec4(1.0, 0.0, 0.0, 0.0); vec4 tangent = vec4(1.0, 0.0, 0.0, 0.0);
vec4 norm = vec4(0.0, 1.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); vec4 binormal = vec4(0.0, 0.0, 1.0, 0.0);
mat4 mvp = gl_ModelViewProjectionMatrix; temp = gl_ModelViewMatrix * gl_Vertex;
mat4 mtx = gl_TextureMatrix[0];
temp = viewpos - gl_Vertex;
waterTex4.x = dot(temp, tangent); waterTex4.x = dot(temp, tangent);
waterTex4.y = dot(temp, binormal); waterTex4.y = dot(temp, binormal);
waterTex4.z = dot(temp, norm); waterTex4.z = dot(temp, norm);
waterTex4.w = 0.0; waterTex4.w = 0.0;
temp = lightpos - gl_Vertex; temp = lightpos;
waterTex0.x = dot(temp, tangent); waterTex0.x = dot(temp, tangent);
waterTex0.y = dot(temp, binormal); waterTex0.y = dot(temp, binormal);
waterTex0.z = dot(temp, norm); waterTex0.z = dot(temp, norm);
waterTex0.w = 0.0; waterTex0.w = 0.0;
mpos = mvp * gl_Vertex;
vec4 t1 = vec4(0.0, -time, 0.0,0.0); vec4 t1 = vec4(0.0, osg_SimulationTime*0.035217, 0.0,0.0);
vec4 t2 = vec4(0.0, -time2, 0.0,0.0); vec4 t2 = vec4(0.0, osg_SimulationTime*-0.0212, 0.0,0.0);
waterTex1 = gl_MultiTexCoord0 + t1; waterTex1 = gl_MultiTexCoord0 + t1;
waterTex2 = gl_MultiTexCoord0 + t2; waterTex2 = gl_MultiTexCoord0 + t2;
waterTex3 = mpos; waterTex3 = gl_MultiTexCoord0;
fogCoord = abs(ecPosition.z / ecPosition.w);
gl_Position = ftransform(); gl_Position = ftransform();
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 430 KiB

After

Width:  |  Height:  |  Size: 502 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 618 KiB

After

Width:  |  Height:  |  Size: 745 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB