xnamath与directx11拾取光线不正确

时间:2013-12-07 20:19:12

标签: c++ xna directx direct3d directx-11

我正在尝试在我的应用程序中实现选择,但我无法让它工作。我已经尝试了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文件加载我的顶点,我已经检查了缓冲区中的内容,并且没有任何翻译或转换。

非常感谢任何帮助。

0 个答案:

没有答案