You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Hello, I think it would be really great if DirectXMath added support for generating perspective projection matrices with infinite reversed-z clip planes. This style of projection matrix has become increasing popular in recent years since they result in excellent distribution of depth precision when used with floating-point depth buffers, and they effectively remove the need for having a maximum view distance. This blog post gives a good overview of why it's good and how it works, and this article has some great visualizations of why reversed-z is beneficial.
Be sure to clear the depth-buffer with 0.0 instead of 1.1, and use the reverse depth comparison operator for the Depth/Stencil state (i.e. D3Dxx_COMPARISON_GREATER_EQUAL instead of D3Dxx_COMPARISON_LESS_EQUAL).
I have support for reverse-z in the DirectX Tool Kit CommonStates.
Hey Chuck Walbourn (@walbourn), thank you for replying! To be clear I was specifically referring to the "infinite" variant of a reversed-z projection, which cannot be done with the existing perspective matrix functions (finite reversed projections can be done as you suggested). The infinite reversed matrix has this form for the LH variant:
Thank you for the suggestion. I definitely see the value in this, but I'll need a bit more time to do the full validation/verification this warrants. In the meantime, you can of course easily create your own projection matrix with existing constructors and functions.
Activity
walbourn commentedon Jan 29, 2023
Thanks for the feedback. It turns out you can trivially use the existing functions for reverse-z: swap the far/near values:
Be sure to clear the depth-buffer with 0.0 instead of 1.1, and use the reverse depth comparison operator for the Depth/Stencil state (i.e.
D3Dxx_COMPARISON_GREATER_EQUALinstead ofD3Dxx_COMPARISON_LESS_EQUAL).TheRealMJP commentedon Jan 30, 2023
Hey Chuck Walbourn (@walbourn), thank you for replying! To be clear I was specifically referring to the "infinite" variant of a reversed-z projection, which cannot be done with the existing perspective matrix functions (finite reversed projections can be done as you suggested). The infinite reversed matrix has this form for the LH variant:
walbourn commentedon Jan 30, 2023
Thanks for the clarification.
walbourn commentedon Feb 14, 2024
Thank you for the suggestion. I definitely see the value in this, but I'll need a bit more time to do the full validation/verification this warrants. In the meantime, you can of course easily create your own projection matrix with existing constructors and functions.
Ossama-MOUSTAFA commentedon Oct 25, 2026
+1 for this feature.
Please add built-in functions for a Right-Handed NDC (Reverse-Z).
It is much simpler than swapping nearZ and farZ manually.