• Create Account

### #ActualRasterGuy

Posted 26 September 2012 - 05:00 PM

Hi guys,

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:

### #2RasterGuy

Posted 26 September 2012 - 05:00 PM

Hi guys,

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 some 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:

### #1RasterGuy

Posted 26 September 2012 - 04:54 PM

Hi guys,

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 some extra behind the scenes? (recall, I'm working on a software renderer)

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: