我正在尝试在D3D中为我的Camera类实现Pitch / Yaw,但我的Pitch()函数会抛出“访问冲突读取位置0x0000008C”。
我google了一下,看到我不能在类/结构中使用XMVECTOR,因为16位对齐。然而,我已经知道了,我再次检查它被宣布为XMFLOAT3,它是!
问题是,在我所有的Camera类的其他函数中(比如更新视图矩阵,......)不会抛出异常。它只是在一个功能中!
所以,这就是我如何声明我的类变量使函数崩溃(虽然我的所有变量都使它崩溃,并且它们以相同的方式定义):
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)。 我或DirectXMath库都不能访问“mRight”的x,y和z值。在我的案例中,“mRight.x”在DirectXMath的情况下“__m128 x = _mm_load_ss(& pSource-> x);”。
一些新的Debug结果: 当我从WM_MOUSEMOVE事件中调用'any'函数时,会发生这种奇怪的现象。甚至我的函数Walk(),当我按下一个键时调用它时效果很好。
最奇怪的事情!
感谢您的帮助!
答案 0 :(得分:0)
我知道我的错误!!我给了一个使用该代码的类的无效指针:D修复它