Sign in to follow this  
nickyc95

Orthographic Projection Issue

Recommended Posts

nickyc95    887

Hi there guys,

 

 

I have a problem with my Ortho Matrix. The engine uses the perspective projection fine but for some reason the Ortho matrix is messed up. (See screenshots below).

 

Can anyone understand what is happening here?

 

VIDEO Shows the same scene, rotating on the Y axis.
http://youtu.be/2feiZAIM9Y0

 

Ortho Projection code

void Matrix4f::InitOrthoProjTransform(float left, float right, float top, float bottom, float zNear, float zFar)
{
m[0][0] = 2 / (right - left);
m[0][1] = 0;
m[0][2] = 0;
m[0][3] = 0;

m[1][0] = 0;
m[1][1] = 2 / (top - bottom);
m[1][2] = 0;
m[1][3] = 0;

m[2][0] = 0;
m[2][1] = 0;
m[2][2] = -1 / (zFar - zNear);
m[2][3] = 0;

m[3][0] = -(right + left) / (right - left);
m[3][1] = -(top + bottom) / (top - bottom);
m[3][2] = -zNear / (zFar - zNear);
m[3][3] = 1;
}

Then using projectionMatrix.InitOrthoProjTransform(0.0f, 800.0f, 0.0f, 600.0f, 0.1f, 1000.0f);

 

OK so the first screenshot that is attached shows the Ortho, second one shows perspective (rotated slightly to show persp).

Edited by nickyc95

Share this post


Link to post
Share on other sites
Ho Gh    163

you should use these parameters (-1.0, 1.0, -1.0*height/width, 1.0*height/width, 0.1, 1000) for ortho

in order (bottom , top , left , right , near , far)

Edited by Hosein G

Share this post


Link to post
Share on other sites
nickyc95    887

you should use these parameters (-1.0, 1.0, -1.0*height/width, 1.0*height/width, 0.1, 1000) for ortho

in order (bottom , top , left , right , near , far)

Why?

 

I thought that when you create an Ortho Matrix you use the screen dimensions to get a "pixel perfect" area to draw in (e.g. 800*600)

 

Thanks

Share this post


Link to post
Share on other sites
Ho Gh    163

no actually there is no pixels there so the point is a ratio between height and width and you should take the origin in center

Share this post


Link to post
Share on other sites
JohnnyCode    1046

ortho matrix is easy to master in the manner of width and height. but you can easiily screw up depth! resulting in paranormal oclusion- or, objects being further ocluding objects being closer. Watch out.  (Ortho normal projection is an observation phenomena that is being rather paranormal- as it is)

Share this post


Link to post
Share on other sites
L. Spiro    25638

you should use these parameters (-1.0, 1.0, -1.0*height/width, 1.0*height/width, 0.1, 1000) for ortho
in order (bottom , top , left , right , near , far)

This is not correct.
http://msdn.microsoft.com/en-us/library/windows/desktop/dd373965(v=vs.85).aspx
 
You are already passing the correct values, which should be actual pixel sizes.
 
Your Z values are both incorrect.
 
m[2][2] = -1 / (zFar - zNear); should be m[2][2] = -2 / (zFar - zNear);.

m[3][2] = -zNear / (zFar - zNear); should be m[3][2] = -(zFar + zNear) / (zFar - zNear);.

 

This is OpenGL, not Direct3D.

Also, try transposing the matrix if these changes do not work.

 

 

L. Spiro

Share this post


Link to post
Share on other sites
nickyc95    887

 

you should use these parameters (-1.0, 1.0, -1.0*height/width, 1.0*height/width, 0.1, 1000) for ortho
in order (bottom , top , left , right , near , far)

This is not correct.
http://msdn.microsoft.com/en-us/library/windows/desktop/dd373965(v=vs.85).aspx
 
You are already passing the correct values, which should be actual pixel sizes.
 
Your Z values are both incorrect.
 
m[2][2] = -1 / (zFar - zNear); should be m[2][2] = -2 / (zFar - zNear);.

m[3][2] = -zNear / (zFar - zNear); should be m[3][2] = -(zFar + zNear) / (zFar - zNear);.

 

This is OpenGL, not Direct3D.

Also, try transposing the matrix if these changes do not work.

 

 

L. Spiro

 

Hi, 

 

thanks for "backing me up", haha.

 

Yeah turns out my matrices weren't consistent with each other, thus caused this issue.

 

Thanks

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this