oceanGLSL.frag
上传用户:xhbjoy
上传日期:2014-10-07
资源大小:38068k
文件大小:2k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. // oceanGLSL.frag
  2. // fragment program for Ocean water simulation
  3. // 05 Aug 2005
  4. // adapted for Ogre by nfz
  5. // converted from HLSL to GLSL
  6. // original shader source from Render Monkey 1.6 Reflections Refractions.rfx
  7. // 06 Aug 2005: moved uvw calculation from fragment program into vertex program 
  8. uniform float fadeBias;
  9. uniform float fadeExp;
  10. uniform vec4 waterColor;
  11. uniform sampler3D Noise;
  12. uniform samplerCube skyBox;
  13. varying vec3 uvw;
  14. varying vec3 normal;
  15. varying vec3 vVec;
  16. void main(void)
  17. {
  18.    // in OpenGL Ogre uses Devil 1.6.7 for loading dds textures.
  19.    // But Devil buggers up the green and blue channels of the 3D
  20.    // texture by setting them to zero so only the red channel has good data
  21.    // Dx9 loads the texture properly but if we want things to look the same
  22.    // between Dx9 and GL we only use the red channel for now until Devil dds issues are fixed
  23.    vec3 noisy = texture3D(Noise, uvw).xxx;
  24.    
  25.    // convert to signed noise
  26.    vec3 bump = 2.0 * noisy - 1.0;
  27.    bump.xz *= 0.15;
  28.    // Make sure the normal always points upwards
  29.    // note that Ogres y axis is vertical (RM Z axis is vertical)
  30.    bump.y = 0.8 * abs(bump.y) + 0.2;
  31.    // Offset the surface normal with the bump
  32.    bump = normalize(normal + bump);
  33.    // Find the reflection vector
  34.    vec3 normView = normalize(vVec);
  35.    vec3 reflVec = reflect(normView, bump);
  36.    // Ogre has z flipped for cubemaps
  37.    reflVec.z = -reflVec.z;
  38.    vec4 refl = textureCube(skyBox, reflVec);
  39.    // set up for fresnel calc
  40.    float lrp = 1.0 - dot(-normView, bump);
  41.    
  42.    // Interpolate between the water color and reflection for fresnel effect
  43.    gl_FragColor = mix(waterColor, refl, clamp(fadeBias + pow(lrp, fadeExp), 0.0, 1.0) );
  44. }