|
|
发表于 2005-5-12 22:15:00
|
显示全部楼层
Re: 如何确定摄像机的可视体(View Volume)的8个顶点的坐标
视景体(View Frustum)经过观察矩阵和投影矩阵变换后,会成为一个半正立方体(顶点坐标见下程序)。这个过程的逆过程可以用来求出在世界坐标系下的视景体坐标:
//pMatView 观察矩阵
//pMatProj 投影矩阵
D3DXMATRIX mat;
// 变换的逆矩阵
D3DXMatrixMultiply( &mat, pMatView, pMatProj );
D3DXMatrixInverse( &mat, NULL, &mat );
//视景体的八个顶点坐标(正立方体)
viewFrustum.vecFrustum[0] = D3DXVECTOR3(-1.0f, -1.0f, 0.0f); // xyz
viewFrustum.vecFrustum[1] = D3DXVECTOR3( 1.0f, -1.0f, 0.0f); // Xyz
viewFrustum.vecFrustum[2] = D3DXVECTOR3(-1.0f, 1.0f, 0.0f); // xYz
viewFrustum.vecFrustum[3] = D3DXVECTOR3( 1.0f, 1.0f, 0.0f); // XYz
viewFrustum.vecFrustum[4] = D3DXVECTOR3(-1.0f, -1.0f, 1.0f); // xyZ
viewFrustum.vecFrustum[5] = D3DXVECTOR3( 1.0f, -1.0f, 1.0f); // XyZ
viewFrustum.vecFrustum[6] = D3DXVECTOR3(-1.0f, 1.0f, 1.0f); // xYZ
viewFrustum.vecFrustum[7] = D3DXVECTOR3( 1.0f, 1.0f, 1.0f); // XYZ
//变换为世界坐标系,8个顶点坐标求出
for( int i = 0; i < 8; i++ )
D3DXVec3TransformCoord( &viewFrustum.vecFrustum, &viewFrustum.vecFrustum, &mat ); |
|