Jump to content
  • Advertisement
Sign in to follow this  
Geometrian

Emulating gluUnproject

This topic is 2539 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

Hi,

I set up a view.
The modelview matrix is the identity matrix:[source]1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1[/source]
The projection matrix is 45 degrees, near 0.1, far 100.0, resulting in a matrix:[source]1.8107 0.0000 0.0000 0.0000
0.0000 2.4142 0.0000 0.0000
0.0000 0.0000 -1.0020 -0.2002
0.0000 0.0000 -1.0000 0.0000[/source]
By the documentation on gluUnproject, I multiply (MV*P)[sup]-1[/sup] by a normalized device coordinate to get an object coordinate. Because in my case, MV is I, that means that MV*P = P, and (MV*P)[sup]-1[/sup] = P[sup]-1[/sup]. Matrix P[sup]-1[/sup] is:[source]0.5523 0.0000 0.0000 0.0000
0.0000 0.4142 0.0000 0.0000
0.0000 0.0000 0.0000 -1.0000
0.0000 0.0000 -4.9950 5.0050[/source]
Now, this is a problem. In the next step, the normalized device coordinate is multiplied by this matrix to get the object coordinate. However, notice that any Z value in the NDC will always be zero, because index 2,2 of this matrix, (MV*P)[sup]-1[/sup], is zero! Clearly, something is going wrong. Help?

Thanks,
-G Edited by Geometrian

Share this post


Link to post
Share on other sites
Advertisement

Now, this is a problem. In the next step, the normalized device coordinate is multiplied by this matrix to get the object coordinate. However, notice that any Z value in the NDC will always be zero, because index 2,2 of this matrix, (MV*P)[sup]-1[/sup], is zero! Clearly, something is going wrong. Help?


Nothing is going wrong, you've just miscalculated something. With this matrix, z value in the result will only be zero if NDC.z is zero (and NDC.w is zero, which it shouldn't be). Yes, M2,2 is zero, but M2,3 is not.

Oh, yeah, and don't forget perspective division (divide result vector by it's w component after matrix multiplication).

Share this post


Link to post
Share on other sites
There is an app for that

GluProject and gluUnProject code

http://www.opengl.org/wiki/GluProject_and_gluUnProject_code

Share this post


Link to post
Share on other sites
Ah thanks everyone! I see now that the problem wasn't that the zero was screwing it up. The problem was that I had forgotten to divide by the "w", which confused me, until I realized that the orders of magnitude differences between the GL code and my emulating code were due to my using 0.1 and 100.0 as clipping planes! Thanks for the tips,
-G

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

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

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!