VegetationShadow.glsl 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #include "Uniforms.glsl"
  2. #include "Transform.glsl"
  3. uniform float cWindHeightFactor;
  4. uniform float cWindHeightPivot;
  5. uniform float cWindPeriod;
  6. uniform vec2 cWindWorldSpacing;
  7. #ifdef WINDSTEMAXIS
  8. uniform vec3 cWindStemAxis;
  9. #endif
  10. #ifdef VSM_SHADOW
  11. varying vec4 vTexCoord;
  12. #else
  13. varying vec2 vTexCoord;
  14. #endif
  15. void VS()
  16. {
  17. mat4 modelMatrix = iModelMatrix;
  18. vec3 worldPos = GetWorldPos(modelMatrix);
  19. #ifdef WINDSTEMAXIS
  20. float stemDistance = dot(iPos.xyz, cWindStemAxis);
  21. #else
  22. float stemDistance = iPos.y;
  23. #endif
  24. float windStrength = max(stemDistance - cWindHeightPivot, 0.0) * cWindHeightFactor;
  25. float windPeriod = cElapsedTime * cWindPeriod + dot(worldPos.xz, cWindWorldSpacing);
  26. worldPos.x += windStrength * sin(windPeriod);
  27. worldPos.z -= windStrength * cos(windPeriod);
  28. gl_Position = GetClipPos(worldPos);
  29. #ifdef VSM_SHADOW
  30. vTexCoord = vec4(GetTexCoord(iTexCoord), gl_Position.z, gl_Position.w);
  31. #else
  32. vTexCoord = GetTexCoord(iTexCoord);
  33. #endif
  34. }