这MSDN文章说明了如何写这产生
http://msdn.microsoft.com/en-us/library/bb147302%28VS.85%29.aspx
D3DXMATRIX
ProjectionMatrix(const float near_plane, // Distance to near clipping
// plane
const float far_plane, // Distance to far clipping
// plane
const float fov_horiz, // Horizontal field of view
// angle, in radians
const float fov_vert) // Vertical field of view
// angle, in radians
{
float h, w, Q;
w = (float)1/tan(fov_horiz*0.5); // 1/tan(x) == cot(x)
h = (float)1/tan(fov_vert*0.5); // 1/tan(x) == cot(x)
Q = far_plane/(far_plane - near_plane);
D3DXMATRIX ret;
ZeroMemory(&ret, sizeof(ret));
ret(0, 0) = w;
ret(1, 1) = h;
ret(2, 2) = Q;
ret(3, 2) = -Q*near_plane;
ret(2, 3) = 1;
return ret;
} // End of ProjectionMatrix
数学在进一步解释的立体矩阵,其独立地考虑到了水平和垂直FOV(尽管,在C++)的方法上面链接的文章帮助您编写此方法的C#版本。祝你好运:-)
嗯...我可能要多一点,因为我在C#中的第一个解释给出了一些...奇怪的...结果... :) 私人矩阵CreateProjection(float horizontalFov ,float verticalFov,floatPlane,float farPlane) var w = 1f /(float)Math.Tan(horizontalFov * 0.5f); var h = 1f /(float)Math.Tan(verticalFov * 0.5f); var q = farPlane /(farPlane - nearPlane); 返回新的矩阵(w,0,0,0,0,h,0,0,0,0,q,1,0,0,-q * nearPlane,0); } – lzcd 2010-05-19 11:43:01