ScreenPos.hlsl 1.1 KB

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