Функция glulookat OpenGL

#opengl #opengl-compat #glu

Вопрос:

Я хочу иметь возможность просматривать сферу планеты с центром 0,0,0 с радиусом 10 единиц, 360 градусов и вверх вниз, нажимая кнопки на клавиатуре. Какие параметры я помещаю в функцию glulookat() в качестве? Я знаю, что центр XYZ должен быть 000, но каким должен быть вектор глаз и вверх?

 void gluLookAt( GLdouble eyeX,
    GLdouble eyeY,
    GLdouble eyeZ,
    GLdouble centerX,
    GLdouble centerY,
    GLdouble centerZ,
    GLdouble upX,
    GLdouble upY,
    GLdouble upZ);
 

Комментарии:

1. Какой путь наверх? Это (0,0,1)? Если да, то используйте это для своего вектора «вверх». Вектор «глаз» — это местоположение вас , зрителя (вашего глаза).

2. можете ли вы понять, как рассчитать положение камеры, которое вы хотите?

Ответ №1:

Не используйте lookAt для этого! Объем тригонометрии, участвующий в вычислении вектора глаза, эквивалентен построению матрицы вида с нуля.

Вместо этого поддерживайте высоту и рыскание камеры и применяйте их с помощью серии перемещений и поворотов:

 glTranslatef(0, 0, -radius);
glRotatef(-pitch, 1, 0, 0);
glRotatef(-yaw, 0, 0, 1); // assumes Z is up