我正在尝试在我的应用程序中实现选择,但我无法让它工作。我已经尝试了3种不同的方法来创建我的采摘光线,但在每一种方法中都存在相同的问题。这是我最终选择的那个:
XMVECTOR screenpoint = XMVectorSet(x, y, 1.0f, 0.0f);
XMVECTOR dirvec = XMVector3Unproject(screenpoint, 0.0f, 0.0f, mClientWidth, mClientHeight, 0.0f, 1.0f, mCam.Proj(), mCam.View(), XMMatrixIdentity());
XMVECTOR RayDir = dirvec - mCam.GetPositionXM();
RayDir = XMVector3Normalize(RayDir);
并使用它来检查多维数据集中三角形的碰撞:
XNA::IntersectRayTriangle(mCam.GetPositionXM(), RayDir, v0, v1, v2, &t);
在所有情况下,它会选择在某些情况下被其他三角形覆盖的三角形。当摄像机位于立方体的一个面前时,它的目标位于该面的右半部分,它会使其正确,但是当它朝向左侧时,它会拾取它左侧的面部。
我的世界变换很简单,一个matrixIdentity,我没有做任何特别的事情。我不确定我应该发布哪些代码,所以请问是否解决问题不够明确。我从一个简单的.obj文件加载我的顶点,我已经检查了缓冲区中的内容,并且没有任何翻译或转换。
非常感谢任何帮助。