I'm having a little trouble wrapping my mind completely around the perspective projection and the relationship to the view plane. A little background:
- I'm working on a 3D Software Renderer.
- I'm reading Lengyel's "Mathematics for 3D Game Programming and Computer Graphics" (I've added a link at the end to a preview in Google Books, has a good chunk of what I'm reading at least, pp. 111 and on.)
So, I understand that a basic perspective projection can be achieved with (obviously the matrix is over kill):
[ 1 0 0 0 ]
[ 0 1 0 0 ]
[ 0 0 1 0 ]
[ 0 0 1/e 1 ]
Where e is the distance to the view-plane(focal length) as a function of the horizontal FOV.
This would correctly project points/vertices, but would not perform any clipping.
I know that the OpenGL projection matrix transforms all of the points into homogeneous clip-space (transforming the view-frustum to a cuboid), and makes clipping to the frustum much more simple. (The matrix can be seen on pp. 124 linked below, labeled Mfrustum)
I also see how the focal length determines the normals from the frustum planes, as well as the aspect ratio's role in the frustum plane normals.
What I don't understand completely, is that, both e(focal length) and the aspect ratio seem to have no contribution to the perspective projection matrix. Is the actual projection a final step after transforming to clip-space (and doing the clipping)? Is OpenGL doing something extra behind the scenes? (recall, I'm working on a software renderer) More over, what is the view-plane's relation to the view-frustum?
I hope my question makes sense, if not I will be happy to rephrase or elaborate. I appreciate and knowledge you can share.
Book Preview:
http://books.google.... normal&f=false