VegetationDepth.hlsl 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #include "Uniforms.hlsl"
  2. #include "Samplers.hlsl"
  3. #include "Transform.hlsl"
  4. #ifndef D3D11
  5. // D3D9 uniforms
  6. uniform float cWindHeightFactor;
  7. uniform float cWindHeightPivot;
  8. uniform float cWindPeriod;
  9. uniform float2 cWindWorldSpacing;
  10. #else
  11. // D3D11 constant buffer
  12. cbuffer CustomVS : register(b6)
  13. {
  14. float cWindHeightFactor;
  15. float cWindHeightPivot;
  16. float cWindPeriod;
  17. float2 cWindWorldSpacing;
  18. }
  19. #endif
  20. void VS(float4 iPos : POSITION,
  21. #ifdef SKINNED
  22. float4 iBlendWeights : BLENDWEIGHT,
  23. int4 iBlendIndices : BLENDINDICES,
  24. #endif
  25. #ifdef INSTANCED
  26. float4x3 iModelInstance : TEXCOORD4,
  27. #endif
  28. float2 iTexCoord : TEXCOORD0,
  29. out float3 oTexCoord : TEXCOORD0,
  30. out float4 oPos : OUTPOSITION)
  31. {
  32. float4x3 modelMatrix = iModelMatrix;
  33. float3 worldPos = GetWorldPos(modelMatrix);
  34. float windStrength = max(iPos.y - cWindHeightPivot, 0.0) * cWindHeightFactor;
  35. float windPeriod = cElapsedTime * cWindPeriod + dot(worldPos.xz, cWindWorldSpacing);
  36. worldPos.x += windStrength * sin(windPeriod);
  37. worldPos.z -= windStrength * cos(windPeriod);
  38. oPos = GetClipPos(worldPos);
  39. oTexCoord = float3(GetTexCoord(iTexCoord), GetDepth(oPos));
  40. }