Eu estou trabalhando em um aplicativo DirectX, e eu estoutendo algum problema multiplicando 2 matrizes juntas, quando tento obter um erro de tempo de execução. Eu só recebo o erro se eu declarar as matrizes no meu cabeçalho, se eu declará-las localmente na função funciona bem. Este não é o único lugar na aplicação onde eu recebo este tipo de erro.
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
}
Mensagem de erro
Unhandled exception at 0x002F4C0F in Engine.exe: 0xC0000005: Access violation reading location 0xFFFFFFFF.
Eu sou capaz de declarar Cube1World no arquivo de cabeçalho, mas se eu tentar fazer isso com rotação ou tradução eu recebo o erro de tempo de execução.
Eu estou executando o windows 8.1 com visual studio 2015 e o mais recente directx sdk. Espero ter explicado bem o problema, obrigado antecipadamente.
Respostas:
3 para resposta № 1Tente definir um Construtor e depois inicialize seus dados dentro dele. Para evitar várias inclusões, inclua guardas de inclusão no arquivo * .h ou use #pragma uma vez.
1 para resposta № 2
Eu encontrei a resposta neste tópico
Crash após m = XMMatrixIdentity () - memória de alias em classes?
"No Livro" Introdução à Programação de Jogos em 3D com o Directx 11 "de" Frank D. Luna "diz:
Não use XMMATRIX como membro de uma classe ou estrutura. Sempre use o XMFloat4x4 e carregue e armazene de volta se você precisar. "