В моем приложении перенасыщения я имитирую самолет с камерой. Когда скорость самолета низкая, я намереваюсь, чтобы нос начал указывать на землю, когда камера падает. Моим первым инстинктом было просто изменить шаг, пока он не был направлен вниз на -90 градусов. Однако я не могу просто изменить высоту тона, потому что, если плоскость наклонена на бок или вверх ногами, это будет означать изменение направления к земле.Эквивалент камеры glut glLoadMatrixf
Теперь я пытаюсь сделать грубое моделирование этого, сдвинув «lookAt.y» вниз. Для этого я пытаюсь получить все текущие координаты камеры, которые я использую, чтобы установить камеру (eye.x, eye.y, eye.z, look.x, look.y, look.z, up.x, выше.y, выше.z). Затем вспомните набор с новыми измененными значениями.
Я работал с Camera.cpp и Camera.h, чтобы управлять функциями моей камеры. Их можно найти: here
после добавления методов для получения всех значений, фактически обновляются только значения глаз, когда сделаны различные движения камеры. Я думаю, мой вопрос в том, как получить эти значения.
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);
}
Есть ли способ, чтобы получить «глаз», «LookAt» и «до» значений из матрицы здесь? Или я должен сделать что-то еще, чтобы получить эти ценности?
-Спасибо заранее за вашу помощь
Как раз для записи, нос самолета гораздо более вероятно будет направлен вверх, когда скорость будет низкой (вместо того, чтобы указывать вниз). Самолеты используют шаг для управления скоростью и дросселируют, чтобы контролировать высоту (как контрастивные, как это звучит). –