Я пытаюсь реализовать Pitch / Yaw для своего класса Camera в D3D, но моя функция Pitch () выдает «Место чтения нарушения доступа 0x0000008C».
Я немного погуглил и увидел, что не могу использовать 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 не могут получить доступ к значениям x, y и z «mRight». В моем случае «mRight.x» в случае DirectXMath «__m128 x = _mm_load_ss ( &pSource-> x); «.
Некоторые новые результаты отладки:
Это странно случается, когда я вызываю ‘any’ функцию из моего события WM_MOUSEMOVE. Даже моя функция Walk (), которая отлично работает, когда я вызываю ее при нажатии клавиши.
Самая странная вещь!
Спасибо за помощь!
Я знаю свою ошибку! Я дал неверный указатель на мой класс, который использует этот код: D Исправлено