Эквивалент камеры glLoadMatrixf с избыточной загрузкой

StackOverflow https://stackoverflow.com/questions/800562

  •  03-07-2019
  •  | 
  •  

Вопрос

В моем приложении glut я моделирую плоскость с помощью камеры.Когда скорость самолета низкая, я намереваюсь, чтобы нос начал указывать на землю, когда камера будет падать.Моим первым побуждением было просто сменить шаг до тех пор, пока он не был направлен вниз на -90 градусов.Однако я не могу просто изменить высоту тона, потому что, если самолет наклонен на бок или вверх ногами, это приведет к изменению направления движения к земле.

Теперь я пытаюсь сделать грубое моделирование этого, сдвинув "LookAt.y" вниз.Чтобы сделать это, я пытаюсь получить все текущие координаты камеры, которые я использую для настройки камеры (глаз.x, глаз.y, глаз.z, смотри.x, смотри.y, смотри.z, вверх.x, вверх.y, вверх.z).Затем вызовите набор с новыми измененными значениями.

Я работал с Camera.cpp и Camera.h для управления функциями моей камеры.Их можно найти здесь

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

Вызов glLoadMaxtrix находится в этой функции

void Camera :: setModelViewMatrix(void)

{ // load model view matrix with existing camera values

    float m[16];

    Vector3 eVec(eye.x, eye.y, eye.z);

    m[0] =  u.x; m[4] =  u.y; m[8]  =  u.z;  m[12] = -eVec.dot(u);

    m[1] =  v.x; m[5] =  v.y; m[9]  =  v.z;  m[13] = -eVec.dot(v);

    m[2] =  n.x; m[6] =  n.y; m[10] =  n.z;  m[14] = -eVec.dot(n);

    m[3] =  0;   m[7] =  0;   m[11] =  0;    m[15] = 1.0;

look.x = u.y; look.y = v.y; look.z = n.y; 

    glMatrixMode(GL_MODELVIEW);

    glLoadMatrixf(m);

}

Есть ли способ получить значения 'eye', 'LookAt' и 'up' из матрицы здесь?Или я должен сделать что-то еще, чтобы получить эти значения?

-Заранее благодарю за вашу помощь

Это было полезно?

Решение

Класс camera, на который вы ссылаетесь, не является фактическим классом OpenGL, но с ним должно быть достаточно просто работать.

Приведенная в кавычках функция просто принимает текущие значения объекта camera и отправляет их в OpenGL.Если вы посмотрите на функцию настройки камеры, то сможете увидеть, как программа вычисляет значения, которые она на самом деле сохраняет.

Значение eye сохраняется непосредственно.Значение LookAt - это просто значение (eye - n), выраженное векторной математикой.Значение up является самым сложным, но если я правильно помню свою векторную математику, я считаю, что up = (n пересекает u).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top