Jump to content
  • Advertisement

DX11 How to render with Matrix.PerspectiveOffCenterLH

This topic is 536 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts


I am trying to render my 3d object in exact screen space coordinates with correct shading.

I tried for this orthoOffCenterLH matrix, but it produces strange render results (object in front part in disappearing and appearing during rotation). I think it because of nature of ortho projection (but maybe I am wrong).

I want to correctly display my 3d object like when I render with perspective projection. 

To achieve this I tried to use PerspectiveOffCenterLH matrix, but when I apply it, I can see nothing.

Here is parameters I pass to the method:

PerspectiveOffScreenProjection = Matrix4x4F.PerspectiveOffCenterLH(0, Width, Height, 0, 100, 1);

ZFar and ZNear are flipped because I am using reversed depth buffer.

And here is how I build matrix itself

public static void PerspectiveOffCenterLH(float left, float right, float bottom, float top, float znear, float zfar, out Matrix4x4F result)
         float zRange = zfar / (zfar - znear);

         result = new Matrix4x4F();
         result.M11 = 2.0f * znear / (right - left);
         result.M22 = 2.0f * znear / (top - bottom);
         result.M31 = (left + right) / (left - right);
         result.M32 = (top + bottom) / (bottom - top);
         result.M33 = zRange;
         result.M34 = 1.0f;
         result.M43 = -znear * zRange;

Also I render it without View matrix to fix object position and dont let it move somewhere.


Also if I flip Znear and ZFar back on their places, it will resnder distored like on first screenshot, but it should render like on the second screenshot


Can anyone help me to fix this issue?



Edited by BlackJoker

Share this post

Link to post
Share on other sites

Ok, seams ortho projection was enough and I just passed incorrect znear/zfar. I thought that max zfar could be 1, but obviously I was mistaken. 

Share this post

Link to post
Share on other sites

  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!