我正在尝试在 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(),当我按下一个键时它也能完美运行。
有史以来最奇怪的事情!
谢谢您的帮助!