Source Code.DirectX Camera Jitter
Я делаю небольшую демонстрационную сцену DirectX, но моя камера кажется «привязана» к нечетным позициям, когда я пытаюсь повернуть ее. Это происходит только при повороте, и я не могу понять, что вызывает его.
// Get the cursor pos and calculate change in movement
POINT cursorPos;
GetCursorPos(&cursorPos);
LONG deltaX = oldCursorPos.x - cursorPos.x;
LONG deltaY = oldCursorPos.y - cursorPos.y;
// Hold right click to rotate
if (GetAsyncKeyState(VK_RBUTTON))
{
XMMATRIX xRotation = XMMatrixRotationY(((float)-deltaX * (float)timer.Delta()));
XMMATRIX yRotation = XMMatrixRotationX(((float)-deltaY * (float)timer.Delta()));
XMMATRIX view = XMLoadFloat4x4(&cameraMatrix);
XMFLOAT4 viewVector = XMFLOAT4(cameraMatrix.m[3][0], cameraMatrix.m[3][1], cameraMatrix.m[3][2], 1.0f);
for (size_t i = 0; i < 3; i++) { cameraMatrix.m[3][i] = 0.0f; }
view = view * xRotation;
view = yRotation * view;
XMStoreFloat4x4(&cameraMatrix, view);
cameraMatrix.m[3][0] = viewVector.x;
cameraMatrix.m[3][1] = viewVector.y;
cameraMatrix.m[3][2] = viewVector.z;
}
oldCursorPos = cursorPos;
Выше код, который выполняет вращение на матрицу камеры, ниже код я использую, чтобы установить матрицу вида, равную обратную матрицу камеры. Обе эти операции выполняются в каждом кадре.
XMMATRIX camera = XMLoadFloat4x4(&cameraMatrix);
XMMATRIX view = XMMatrixInverse(NULL, camera);
XMStoreFloat4x4(&sceneMatrix.viewMatrix, view);
Оба эти фрагменты не кажется проблемы, хотя, как я уже тройной проверил мои заметки и это именно то, как мой инструктор ожидает, что это будет сделано. Эта ошибка происходит в режиме отладки и выпуска.
Я разместил исходный код по ссылке выше, если привлекательный человек, такой как вы, осмелился взглянуть на остальную часть кода. Остерегайтесь: это небольшое демо-приложение, поэтому постарайтесь не съеживаться на жестко закодированные объекты и т. Д.
Спасибо! Это исправило это. В моей голове использование time.delta() имело смысл, потому что я хотел отслеживать изменение движения мыши вместе с тем, как быстро это изменение произошло. Но количество изменений за кадр уже достигает этого. Я ценю помощь :) – Dakattack