|
BOOL D3DXIntersectTri(
CONST D3DXVECTOR3 *p0,
CONST D3DXVECTOR3 *p1,
CONST D3DXVECTOR3 *p2,
CONST D3DXVECTOR3 *pRayPos,
CONST D3DXVECTOR3 *pRayDir,
FLOAT *pU,
FLOAT *pV,
FLOAT *pDist );
这个函数,我有一个疑问。就是表示三角形顶点的p0,p1,p2,在测试之前要不要先用D3DXVec3TransformCoord先进行和世界矩阵转化一下?
我看了两本书,其中一本在计算射线时,用到了世界矩阵:
lpDevice->GetTransform( D3DTS_WORLD, &matWorld );
lpDevice->GetTransform( D3DTS_VIEW, &matView );
D3DXMATRIX mWorldView = matWorld * matView;
D3DXMatrixInverse( &mInverse, NULL, &mWorldView );
// ........ ( 计算射线的原点和方向 )
但是在另一本书中:
lpDevice->GetTransform( DEDTS_VIEW, &matView );
D3DXMatrixInverse( &mInverse, NULL, &matView ); // 没有使用世界矩阵
// ..........(计算射线的原点和方向)
这两种计算,在进行D3DXIntersectTri相交测试时,貌似对传入的三角形顶点都没有进行特殊处理(没有使用世界矩阵等进行转换),不过都是可以正常运行的。
我想问的就是,到底要不要世界矩阵参与运算?什么情况下需要?什么情况不需要?谢谢!!! |
|