D3Dpick一个大大的疑问。
d3d::Ray ray = CalcPickingRay(LOWORD(lParam), HIWORD(lParam));
// transform the ray to world space
D3DXMATRIX view;
Device->GetTransform(D3DTS_VIEW, &view);
D3DXMATRIX viewInverse;
D3DXMatrixInverse(&viewInverse, 0, &view);
TransformRay(&ray, &viewInverse);
// test for a hit
if( RaySphereIntTest(&ray, &BSphere) )
这个是龙书上边的计算相交。
用的是视图空间的射线转换到世界空间然后跟物体本地空间中的包围圆测试相交。 这儿不在一个坐标系也能测试?
const D3DXMATRIX matView = *g_Camera.GetViewMatrix();
const D3DXMATRIX matWorld = *g_Camera.GetWorldMatrix();
D3DXMATRIX mWorldView = matWorld * matView;
D3DXMATRIX m;
D3DXMatrixInverse( &m, NULL, &mWorldView );
第二个是DIRECT SDK里边的这个更绝。 转换到世界空间后再世界空间的逆转换这个转换到哪儿去了。 他们都有一个共同点用物体的本地坐标做相交测试。 这样不就不在一个坐标系了。那位高人指点下迷津。