Started by Jun 27 2001 11:14 AM

,
1 reply to this topic

Posted 27 June 2001 - 11:14 AM

does anyone knwo the code that this routine from the DirectX 8.0 SDK has D3DXMatrixPerspectiveFovLH. i need the routine if anyone knows it, or somethign similar
thanks much
Code makes the world spin round

Posted 28 June 2001 - 07:12 AM

There is an example in the DX8 documentation in an article titled: "Setting Up a Projection Matrix". However, the following from the OpenGL red book is more general. Some of the terms here are zero if the camera is looking straight down the z axis (which is usual).

The perspective projection matrix is given by:

Where:

That matrix came directly from the OpenGL red book, Appendix F page 674 in the 3rd edition. But it is not represented in terms of field of view and aspect ratio, so.....

n is the same as zn in the D3DXMatrix... function, and f is the same as zf. You can compute l, r, b, and t from fovy and aspect:

(NOTE: w may be h/aspect. MS documentation doesn't actually say whether aspect = w/h or aspect = h/w, as far as I can tell, and I haven't used that D3DX function to determine for myself.)

If you want the camera to be looking along a line that is normal to the clip planes (which is the usual case), then l, r, b, and t are simply:

Er, there is one more thing. The matrix above may need to be transposed for Direct3D. This would depend on whether the transformation is applied by multiplying on the left or right of the coordinate vector...

Hope this helps!

Graham Rhodes

Senior Scientist

Applied Research Associates, Inc.

The perspective projection matrix is given by:

[ 2n r+l ]

| --- 0 --- 0 |

| r-l r-l |

| |

| 2n t+b |

R = | 0 --- --- 0 |

| t-b t-b |

| |

| -(f+n) -2fn |

| 0 0 ------ ----- |

| f-n f-n |

| |

[ 0 0 -1 0 ]

Where:

l = horizontal coordinate of left side of near clip plane

r = horizontal coordinate of right side of near clip plane

b = vertical coordinate of bottom side of near clip plane

t = vertical coordinate of top side of near clip plane

n = distance (z value) from camera to near clip plane

f = distance (z value) from camera to far clip plane

That matrix came directly from the OpenGL red book, Appendix F page 674 in the 3rd edition. But it is not represented in terms of field of view and aspect ratio, so.....

n is the same as zn in the D3DXMatrix... function, and f is the same as zf. You can compute l, r, b, and t from fovy and aspect:

h = height of near clip plane = 2 * zn * tan(fovy/2)

w = width of near clip plane = h * aspect

(NOTE: w may be h/aspect. MS documentation doesn't actually say whether aspect = w/h or aspect = h/w, as far as I can tell, and I haven't used that D3DX function to determine for myself.)

If you want the camera to be looking along a line that is normal to the clip planes (which is the usual case), then l, r, b, and t are simply:

l = -w/2

r = w/2

b = -h/2

t = h/2

Er, there is one more thing. The matrix above may need to be transposed for Direct3D. This would depend on whether the transformation is applied by multiplying on the left or right of the coordinate vector...

Hope this helps!

Graham Rhodes

Senior Scientist

Applied Research Associates, Inc.