В моем приложении перенасыщения я моделирую самолет с камерой. Когда скорость самолетов низкая, я намерен заставить нос начать указывать на землю, когда камера падает. Моим первым инстинктом было просто изменить шаг , пока он не будет направлен вниз при -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' из матрицы здесь? Или я должен сделать что-то еще, чтобы получить эти значения?
Заранее спасибо за помощь