Войти
ПодсказкиСтатьи

Chase камера

Автор:

Вот мой способ сделать камеру которая будет лететь сзади автомобиля.

Нужно всего лишь настроить точку позиции для lookAt камеры.

Понадобится функция для превращения матрицы в кватернион

+ Показать

void ChaseCamera::update(const Mat4& chasisMatrix, f32 dt)
{
  m_camera->m_objectBase.UpdateBase();

  math::makePerspectiveRHMatrix(
    m_camera->m_projectionMatrix,
    m_camera->m_fov,
    m_camera->m_aspect,
    m_camera->m_near,
    m_camera->m_far);

  Mat4 V = chasisMatrix; // матрица корпуса
  auto bodyPosition = V[3];
  V[3] = v4f(0.f, 0.f, 0.f, 1.f);
  Quat Q = math::matToQuat(V);
  Q.normalize();

  // m_orientation - кватернион который используется для вращения точки
  m_orientation = Q.slerp(m_orientation, Q, 1.f * dt, 0.1f);

  Mat4 rot;
  math::makeRotationMatrix(rot, m_orientation); // я думаю повернуть точку можно и без матрицы....

  // m_originalPosition - позиция камеры при инициализации относительно корпуса
  v4f newPosition = math::mul(m_originalPosition, rot) + bodyPosition;

  math::makeLookAtRHMatrix(
    m_camera->m_viewMatrix,
    newPosition, 
    bodyPosition + v4f(0.f, m_originalTarget, 0.f, 0.f), // m_originalTarget - поднимаем\опускаем точку куда смотрит камера
    m_camera->m_up
  );

  m_camera->Update(); // построение frustum и т.д.
}

Запустить видео по клику - Как делать игрыЗапустить видео по клику - Как делать игры

(видео лагает потому что ПК слабый + в bullet значение maxSubStep стояло 1)

#камера

21 декабря 2020