ScreenPos.hlsl 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  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. float2 GetQuadTexCoordNoFlip(float3 worldPos)
  22. {
  23. return float2(
  24. worldPos.x * 0.5 + 0.5,
  25. -worldPos.y * 0.5 + 0.5);
  26. }
  27. float3 GetFarRay(float4 clipPos)
  28. {
  29. float3 viewRay = float3(
  30. clipPos.x / clipPos.w * cFrustumSize.x,
  31. clipPos.y / clipPos.w * cFrustumSize.y,
  32. cFrustumSize.z);
  33. return mul(viewRay, cCameraRot);
  34. }
  35. float3 GetNearRay(float4 clipPos)
  36. {
  37. float3 viewRay = float3(
  38. clipPos.x / clipPos.w * cFrustumSize.x,
  39. clipPos.y / clipPos.w * cFrustumSize.y,
  40. 0.0);
  41. return mul(viewRay, cCameraRot) * cDepthMode.z;
  42. }