# Perspective projection matrix

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

## Recommended Posts

I have a perspective projection matrix which is calculated thus: (Taken from OpenGL Reference Manual, 3rd edition)
  f = cotangent(fovy/2)
dp = near - far

f/aspect   0        0                0
0       f        0                0
0       0  (far+near)/dp   (2*far*near)/dp
0       0       -1                0

Can you instruct me how to calculate inverse of this matrix? I need this in order to transform coordinates back and forth between object space and window space. It is more convenient to use matrix of my own rather than gluProject/glUnProject. Thanks

##### Share on other sites
Quote:
 Original post by HenriHI have a perspective projection matrix which is calculated thus:(Taken from OpenGL Reference Manual, 3rd edition) f = cotangent(fovy/2) dp = near - far f/aspect 0 0 0 0 f 0 0 0 0 (far+near)/dp (2*far*near)/dp 0 0 -1 0Can you instruct me how to calculate inverse of this matrix? I need this in order to transform coordinates back and forth between object space and window space. It is more convenient to use matrix of my own rather than gluProject/glUnProject.Thanks
You can special-case matrix inversion for matrices of this sort, but I wouldn't bother if I were you - just use a generic inversion function (if you don't have such a function available and aren't sure how to implement it, post back).

##### Share on other sites
This type of perspective matrix is actually quite easy to invert analytically given its relative sparsity. Since the upper-right and lower-left 2x2 sub-matrices are all 0's, you can invert the upper-left and lower-right sub-matrices independently. The upper-left sub-matrix only has elements along the diagonal so it's trivial to invert, while the lower-right sub-matrix requires some more mental math. But since you can treat it as a 2x2, inversion is still easy (lots of cancellations as well). From some quick back-of-the-envelope math I get:
aspect/f      0           0                    0   0         1/f          0                    0   0          0           0                   -1   0          0    dp/(2*far*near)   (far+near)/(2*far*near)

##### Share on other sites
That's a block-matrix. Behold the power of recursive inversion:

aspect/f            0                 0                 0   0               1/f                0                 0   0                0                 0                -1   0                0         dp/(2*far*near)   (far+near)/(2*far*near)

Edit: Damn you, Zipster. I'll take consolation in the fact that this provides some level of verification [rolleyes].

##### Share on other sites
Wow, amazing! Thanks, I will check if this works.

##### Share on other sites
Yea it does! You saved a lot of hazzle-dazzle from me. Thanks to you all!

1. 1
2. 2
Rutin
16
3. 3
4. 4
5. 5

• 26
• 11
• 9
• 9
• 11
• ### Forum Statistics

• Total Topics
633702
• Total Posts
3013450
×