Glut glLoadMatrixf эквивалент камеры - PullRequest
1 голос
/ 29 апреля 2009

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

Теперь я пытаюсь сделать грубую симуляцию этого, смещая lookAt.y вниз. Для этого я пытаюсь получить все текущие координаты камеры, которые я использую для установки камеры. (eye.x, eye.y, eye.z, look.x, look.y, look.z, up.x, up.y, up.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' из матрицы здесь? Или я должен сделать что-то еще, чтобы получить эти значения?

Заранее спасибо за помощь

1 Ответ

1 голос
/ 29 апреля 2009

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

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

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

...