diff options
author | Joshua Rahm <joshua.rahm@colorado.edu> | 2014-04-18 13:54:36 -0600 |
---|---|---|
committer | Joshua Rahm <joshua.rahm@colorado.edu> | 2014-04-18 13:54:36 -0600 |
commit | e1662612bec40fc131ecd306b66f6cb99f7f33e6 (patch) | |
tree | 746a288748690d4352d0ee45fe7a0fea4ab2b67e /shaders | |
parent | e4754131548a55fea393d6fc9245b20fcd60c62c (diff) | |
download | terralloc-e1662612bec40fc131ecd306b66f6cb99f7f33e6.tar.gz terralloc-e1662612bec40fc131ecd306b66f6cb99f7f33e6.tar.bz2 terralloc-e1662612bec40fc131ecd306b66f6cb99f7f33e6.zip |
fixed reflection
Diffstat (limited to 'shaders')
-rw-r--r-- | shaders/water.frag | 36 |
1 files changed, 26 insertions, 10 deletions
diff --git a/shaders/water.frag b/shaders/water.frag index 82b8163..4a73318 100644 --- a/shaders/water.frag +++ b/shaders/water.frag @@ -4,7 +4,11 @@ layout(location = 0) out vec4 frag_color ; layout(location = 8) uniform vec4 lightPos ; +layout(location = 9) uniform float time ; +layout(location = 10) uniform vec4 globalAmbient ; + uniform sampler2D texture ; + uniform sampler2D skytex ; in vec3 normal ; in vec4 position ; @@ -13,7 +17,7 @@ in vec2 texpos ; float dX = 1 / 512.0 ; float dY = 1 / 512.0 ; vec4 sample(float xc,float yc) { - return texture2D(texture,texpos + vec2(xc,yc)); + return texture2D(texture,texpos + vec2(xc,yc) - vec2(time/20.0,time/20.0)); } vec3 calNormChange( vec3 norm, vec3 down, vec3 right ) { @@ -35,14 +39,26 @@ vec3 calNormChange( vec3 norm, vec3 down, vec3 right ) { return (right*2 + down*2 + norm) / 5.0 ; } +in vec3 original_x ; +in vec3 original_z ; void main() { -// vec3 down = vec3( 0, -1, 0 ) ; -// vec3 right = normalize(cross( normal, down )) ; -// down = normalize(cross( normal, right ) ); -// vec3 newNorm = calNormChange( normal, down, right ) ; -// -// float coef = dot( normalize(vec3(lightPos) - vec3(position)), normalize(newNorm) ) ; -// vec4 color = texture2D(texture,texpos) ; -// frag_color = vec4(color.xyz * vec3(0.0,0.4,0.7) * coef,0.8); - frag_color = vec4(0,0,1,0.8) ; + vec3 down = vec3( 0, -1, 0 ) ; + vec3 right = normalize(cross( normal, down )) ; + down = normalize(cross( normal, right ) ); + vec3 newNorm = calNormChange( normal, down, right ) ; + + vec3 camVector = vec3(position) - vec3(0,0,0); + vec3 ref = reflect( normalize(camVector), newNorm ) ; + + float tex_x = (dot( ref, original_x ) + 1) / 2; + float tex_y = (dot( ref, original_z ) + 1) / 2; + vec4 refcolor = texture2D(skytex, vec2(tex_x,tex_y)); + float coef = dot( normalize(vec3(lightPos) - vec3(position)), normalize(normal) ) * 0.5 + 0.5 ; + + + // frag_color = vec4( original_z, 1.0 ); + // frag_color = vec4(tex_x,tex_y,0,1.0) ; + // vec4 color = sample(0,0); + frag_color = vec4(vec3(refcolor * coef) * vec3(0.6,0.8,1.0),0.8) * vec4(normalize(globalAmbient.xyz),1.0); +// frag_color = vec4(0,0,1,0.8) ; } |