|
|
发表于 2007-1-9 05:11:00
|
显示全部楼层
Re:问个关于视截体平面的问题.
这是D3D的做法。
pCullInfo->vecFrustum[0] = D3DXVECTOR3(-1.0f, -1.0f, 0.0f); // xyz
pCullInfo->vecFrustum[1] = D3DXVECTOR3( 1.0f, -1.0f, 0.0f); // Xyz
pCullInfo->vecFrustum[2] = D3DXVECTOR3(-1.0f, 1.0f, 0.0f); // xYz
pCullInfo->vecFrustum[3] = D3DXVECTOR3( 1.0f, 1.0f, 0.0f); // XYz
pCullInfo->vecFrustum[4] = D3DXVECTOR3(-1.0f, -1.0f, 1.0f); // xyZ
pCullInfo->vecFrustum[5] = D3DXVECTOR3( 1.0f, -1.0f, 1.0f); // XyZ
pCullInfo->vecFrustum[6] = D3DXVECTOR3(-1.0f, 1.0f, 1.0f); // xYZ
pCullInfo->vecFrustum[7] = D3DXVECTOR3( 1.0f, 1.0f, 1.0f); // XYZ
for( INT i = 0; i < 8; i++ )
D3DXVec3TransformCoord( &pCullInfo->vecFrustum, &pCullInfo->vecFrustum, &mat );
D3DXPlaneFromPoints( &pCullInfo->planeFrustum[0], &pCullInfo->vecFrustum[0],
&pCullInfo->vecFrustum[1], &pCullInfo->vecFrustum[2] ); // Near
D3DXPlaneFromPoints( &pCullInfo->planeFrustum[1], &pCullInfo->vecFrustum[6],
&pCullInfo->vecFrustum[7], &pCullInfo->vecFrustum[5] ); // Far
D3DXPlaneFromPoints( &pCullInfo->planeFrustum[2], &pCullInfo->vecFrustum[2],
&pCullInfo->vecFrustum[6], &pCullInfo->vecFrustum[4] ); // Left
D3DXPlaneFromPoints( &pCullInfo->planeFrustum[3], &pCullInfo->vecFrustum[7],
&pCullInfo->vecFrustum[3], &pCullInfo->vecFrustum[5] ); // Right
D3DXPlaneFromPoints( &pCullInfo->planeFrustum[4], &pCullInfo->vecFrustum[2],
&pCullInfo->vecFrustum[3], &pCullInfo->vecFrustum[6] ); // Top
D3DXPlaneFromPoints( &pCullInfo->planeFrustum[5], &pCullInfo->vecFrustum[1],
&pCullInfo->vecFrustum[0], &pCullInfo->vecFrustum[4] ); // Bottom |
|