Шаг камеры OpenGL, вращение рыскания и крена

Я пытаюсь создать класс для управления камерой в OpenGL.
У меня есть три способа изменить угол наклона камеры.
Методы принимают параметр с плавающей точкой для использования в качестве количества вращения, которое нужно добавить.

Код в этих методах, где мне нужна помощь. Вращения хранятся в Vector3.
Пока для метода изменения высоты тона у меня есть:

void changePitch(float degrees)
{
float rads = MathHelp::degreesToRadians(degrees);
m_rotation.x += cos(m_rotation.y) * rads;
}

Это насколько я мог получить сам. Это вроде работает, камера смотрит вверх и вниз, смотря вверх или вниз по оси z, а не смотря вниз по оси x. Я попытался добавить вращение z:

m_rotation.z += sin(m_rotation.y) * rads;

Но это не очень хорошо.

3

Решение

Предположим, у вас есть upVector, lookAtVector а также rightVector Трехмерные векторы, направленные вверх, смотря в направлении и вправо от вашей камеры. Затем, чтобы правильно увеличить шаг, вы должны сделать следующие вычисления:

void changePitch(angle) {
angle = DegreeToRadian(angle);

// Rotate lookAtVector around the right vector
// This is where we actually change pitch
lookAtVector = Normalize3dVector(viewDir * cos(angle) + UpVector * sin(angle));

// Now update the upVector
upVector = CrossProduct(rightVector, lookAtVector);
}

В вышеприведенном фрагменте названия произвольно используемых функций не требуют пояснений.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]