我正在开发DirectX应用程序,在将2个矩阵相乘时遇到了一些问题,当我尝试时,我遇到了运行时错误。只有当我在头中声明矩阵时,我才会得到错误,如果我在函数中本地声明它们,它会正常工作。这并不是应用程序中唯一出现此类错误的地方。
图形类.cpp
void GraphicClass::UpdateScene()
{
Cube1World = DirectX::XMMatrixIdentity();
DirectX::XMVECTOR rotaxis = DirectX::XMVectorSet(0.0f, 1.0f, 0.0f, 0.0f);
Rotation = DirectX::XMMatrixRotationAxis(rotaxis, rot);
Translation = DirectX::XMMatrixTranslation(0.0f, 0.0f, 4.0f);
Cube1World = Translation * Rotation; //I get run time error on this line
}
图形类.h
class GraphicClass{
DirectX::XMMATRIX Cube1World;
DirectX::XMMATRIX Rotation;
DirectX::XMMATRIX Translation;
float rot = 0.01f;
//other Code
}
错误消息
Unhandled exception at 0x002F4C0F in Engine.exe: 0xC0000005: Access violation reading location 0xFFFFFFFF.
我可以在头文件中声明Cube1World,但如果我尝试使用Rotation或Translation,我会得到运行时错误。
我正在运行windows 8.1和visual studio 2015以及最新的directx sdk。我希望我把这个问题解释得足够好,提前谢谢。
尝试定义一个构造函数,然后初始化里面的数据。为了避免多个include,请在*.h文件中定义include保护或使用#pragma一次。
我在这个线程上找到了答案
m=XMMatrixIdentity()后崩溃-类中的内存对齐?
在"Frank D.Luna"的"Directx 11 3D游戏编程简介"一书中,它说:
不要将XMMIX用作类或结构的成员。请始终使用XMFloat4x4,并在需要时加载和存储。"