Поворот 3D камеры с помощью DirectX11

0

Я пытаюсь создать камеру для просмотра 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:

  1. Нормализовать векторный вид, Вверх, Вправо и проверить, являются ли они взаимно ортогональными (для цели и камеры)
  2. Обновить положение камеры
  3. Заполните мой viewMatrix новым элементом:

[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]

Но когда я тестирую, вращение ничего не делает (но оно входит в функцию). Что я делаю не так? И моя логика правильная, или я должен сделать свою камеру иначе?

Теги:
camera
directx
rotation

1 ответ

0

У вас уже есть некоторые готовые функции для вас, если вы предпочитаете их:

XMMatrixLookAtLH

или

XMMatrixLookToLH

Они должны делать именно то, что вам нужно (и у вас есть исходный код для них).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню