ScreenPos.hlsl 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #ifdef COMPILEVS
  2. float4 GetScreenPos(float4 clipPos)
  3. {
  4. return float4(
  5. clipPos.x * cGBufferOffsets.z + cGBufferOffsets.x * clipPos.w,
  6. -clipPos.y * cGBufferOffsets.w + cGBufferOffsets.y * clipPos.w,
  7. 0.0,
  8. clipPos.w);
  9. }
  10. float2 GetScreenPosPreDiv(float4 clipPos)
  11. {
  12. return float2(
  13. clipPos.x / clipPos.w * cGBufferOffsets.z + cGBufferOffsets.x,
  14. -clipPos.y / clipPos.w * cGBufferOffsets.w + cGBufferOffsets.y);
  15. }
  16. float2 GetQuadTexCoord(float4 clipPos)
  17. {
  18. return float2(
  19. clipPos.x / clipPos.w * 0.5 + 0.5,
  20. -clipPos.y / clipPos.w * 0.5 + 0.5);
  21. }
  22. float2 GetQuadTexCoordNoFlip(float3 worldPos)
  23. {
  24. return float2(
  25. worldPos.x * 0.5 + 0.5,
  26. -worldPos.y * 0.5 + 0.5);
  27. }
  28. float3 GetFarRay(float4 clipPos)
  29. {
  30. float3 viewRay = float3(
  31. clipPos.x / clipPos.w * cFrustumSize.x,
  32. clipPos.y / clipPos.w * cFrustumSize.y,
  33. cFrustumSize.z);
  34. return mul(viewRay, cCameraRot);
  35. }
  36. float3 GetNearRay(float4 clipPos)
  37. {
  38. float3 viewRay = float3(
  39. clipPos.x / clipPos.w * cFrustumSize.x,
  40. clipPos.y / clipPos.w * cFrustumSize.y,
  41. 0.0);
  42. return mul(viewRay, cCameraRot) * cDepthMode.z;
  43. }
  44. #endif