Chase камера
Автор: 3dhater
Вот мой способ сделать камеру которая будет лететь сзади автомобиля.
Нужно всего лишь настроить точку позиции для lookAt камеры.
Понадобится функция для превращения матрицы в кватернион
+ Показать
Автор: 3dhater
Вот мой способ сделать камеру которая будет лететь сзади автомобиля.
Нужно всего лишь настроить точку позиции для 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 и т.д. }