1

我正在尝试在 D3D 中为我的 Camera 类实现 Pitch/Yaw,但我的 Pitch() 函数抛出“访问冲突读取位置 0x0000008C”。

我用谷歌搜索了一下,发现由于 16 位对齐,我不能在类/结构中使用 XMVECTOR。但是我已经知道了,我仔细检查了它是否被声明为 XMFLOAT3 并且确实如此!

问题是,在我的相机类的所有其他功能中(比如更新视图矩阵,......)都不会抛出异常。它只是在一个功能中!

因此,这就是我声明使函数崩溃的类变量的方式(尽管我的所有变量都使其崩溃,并且它们的定义方式相同):

XMFLOAT3 mRight;

以下是我声明 Pitch 函数的方式:

void Pitch(float a)
{
    //Here it makes my code crash
    XMMATRIX R = XMMatrixRotationAxis(XMLoadFloat3(&mRight), a);

    //Store and compute
    XMStoreFloat3(&mLook, XMVector3TransformNormal(XMLoadFloat3(&mLook), R));
    XMStoreFloat3(&mUp, XMVector3TransformNormal(XMLoadFloat3(&mUp), R));
}

我也使用 x86 作为架构,尽管 x64 给出了完全相同的结果(除了内存位置:D)。I 或 DirectXMath 库都无法访问“mRight”的 x、y 和 z 值。在我的例子中,DirectXMath 中的“mRight.x”是“__m128 x = _mm_load_ss(&pSource->x);”。

一些新的调试结果:当我从 WM_MOUSEMOVE 事件中调用“任何”函数时,这很奇怪。甚至我的函数 Walk(),当我按下一个键时它也能完美运行。

有史以来最奇怪的事情!

谢谢您的帮助!

4

1 回答 1

0

我知道我的错误!!我给了使用该代码的类的无效指针:D 修复了它

于 2014-09-30T16:04:16.990 回答