我正在研究DirectX应用程序,当我尝试运行时错误时,我遇到了将2个矩阵相乘的麻烦。如果我在我的标题中声明了矩阵,我只得到错误,如果我在函数中本地声明它可以正常工作。这不是我在应用程序中遇到此类错误的唯一地方。
GraphicClass.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
}
GraphicClass.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,但如果尝试使用旋转或翻译,我会得到运行时错误。
我正在使用visual studio 2015和最新的directx sdk运行Windows 8.1。 我希望我能够很好地解释这个问题,提前谢谢。
答案 0 :(得分:3)
尝试定义构造函数,然后在里面初始化数据。要避免在..h文件中包含多个include include guards或使用#pragma once。
答案 1 :(得分:1)
我在这个帖子上找到了答案
Crash after m = XMMatrixIdentity() - aligment memory in classes?
“在书中”来自“Frank D. Luna”的Directx 11 3D游戏编程简介中它说:
不要将XMMATRIX用作类或结构的成员。如果需要,请始终使用XMFloat4x4并加载并存储。 “