Я пытаюсь создать камеру для просмотра fbx с DirectX11 в C++. Я добился перевода, но не вращения. В моем классе Camera у меня есть 2 ориентира: моя камера и моя цель (у них есть как вектор вверх, правый вектор, вектор lookAt и позиция).
Чтобы сделать поворот, я продолжаю так:
void
Camera::upRotation(float angle)
{
using namespace DirectX;
XMMATRIX yaw;
yaw = XMMatrixRotationAxis(XMLoadFloat3(&this->targetUp), XMConvertToRadians(angle));
XMVector3TransformCoord(XMLoadFloat3(&this->cameraLookAt), yaw);
XMVector3TransformCoord(XMLoadFloat3(&this->targetLookAt), yaw);
XMVector3TransformCoord(XMLoadFloat3(&this->cameraRight), yaw);
XMVector3TransformCoord(XMLoadFloat3(&this->targetRight), yaw);
}
Чтобы обновить мою viewMatrix I:
[cameraRight.x; cameraUp.x; cameraLookAt.x; 0.0f
cameraRight.y; cameraUp.y; cameraLookAt.y; 0.0f
cameraRight.z; cameraUp.z; cameraLookAt.z; 0.0f
cameraRight. cameraPos; cameraUp. cameraPos; cameraLookAt.cameraPos; 1.0f]
Но когда я тестирую, вращение ничего не делает (но оно входит в функцию). Что я делаю не так? И моя логика правильная, или я должен сделать свою камеру иначе?
У вас уже есть некоторые готовые функции для вас, если вы предпочитаете их:
или
Они должны делать именно то, что вам нужно (и у вас есть исходный код для них).