Guest User

Untitled

a guest
Oct 28th, 2018
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.65 KB | None | 0 0
  1. #include "Uniforms.glsl"
  2. #include "Samplers.glsl"
  3. #include "Transform.glsl"
  4.  
  5. #ifdef VSM_SHADOW
  6.     varying vec4 vTexCoord;
  7. #else
  8.     varying vec2 vTexCoord;
  9. #endif
  10.  
  11. uniform vec4 cHeightData;  // terrain width, terrain height, spacing.x, spacing.y
  12. uniform sampler2D sHeightMap1;
  13. uniform sampler2D sCoverMap2;
  14.  
  15. void VS()
  16. {
  17.     mat4 modelMatrix = iModelMatrix;
  18.     vec3 worldPos = GetWorldPos(modelMatrix);
  19.  
  20.     float tu=worldPos.x / cHeightData.z;
  21.     float tv=worldPos.z / cHeightData.z;
  22.  
  23.     vec2 htuv=vec2((tu/cHeightData.x)+0.5, 1.0-((tv/cHeightData.y)+0.5));
  24.     vec4 htt=textureLod(sHeightMap1, htuv, 0.0);
  25.     vec4 cov=textureLod(sCoverMap2, htuv, 0.0);
  26.  
  27.     float vx=cov.r*2.0-1.0;
  28.     float vz=cov.b*2.0-1.0;
  29.     worldPos.x=worldPos.x+vx*cHeightData.w*0.5;
  30.     worldPos.z=worldPos.z+vz*cHeightData.w*0.5;
  31.     float htscale=cHeightData.w*255.0;
  32.     float ht=htt.r*htscale + htt.g;
  33.  
  34.     float dx=worldPos.x - cCameraPos.x;
  35.     float dz=worldPos.z - cCameraPos.z;
  36.     float dist=sqrt(dx*dx+dz*dz);
  37.     dist=(dist-30.0)/(0.7*30.0-30.0);
  38.     dist=clamp(dist,0.0,1.0);
  39.     worldPos.y=worldPos.y*dist*cov.g + ht;
  40.  
  41.     gl_Position = GetClipPos(worldPos);
  42.     #ifdef VSM_SHADOW
  43.         vTexCoord = vec4(GetTexCoord(iTexCoord), gl_Position.z, gl_Position.w);
  44.     #else
  45.         vTexCoord = GetTexCoord(iTexCoord);
  46.     #endif
  47. }
  48.  
  49. void PS()
  50. {
  51.     #ifdef ALPHAMASK
  52.         float alpha = texture2D(sDiffMap, vTexCoord.xy).a;
  53.         if (alpha < 0.5)
  54.             discard;
  55.     #endif
  56.  
  57.     #ifdef VSM_SHADOW
  58.         float depth = vTexCoord.z / vTexCoord.w * 0.5 + 0.5;
  59.         gl_FragColor = vec4(depth, depth * depth, 1.0, 1.0);
  60.     #else
  61.         gl_FragColor = vec4(1.0);
  62.     #endif
  63. }
Advertisement
Add Comment
Please, Sign In to add comment