#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