У меня есть следующий код OpenGL в функции дисплея:
glLoadIdentity();
gluLookAt(eyex, eyey, eyez, atx, aty, atz, upx, upy, upz);
// called as: gluLookAt(20, 5, 5, -20, 5, 5, 0, 1, 0);
axis();
glutWireCube (1.);
glFlush ();
axis()
рисует линии от (0,0,0) до (10,0,0), (0,10,0) и (0,10,0) плюс линии от (1,0, 0) до (1,3,0).
Моя функция изменения формы содержит следующее:
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
gluPerspective(45.0, (GLsizei) w / (GLsizei) h, 1.0, 100.0);
glMatrixMode (GL_MODELVIEW);
На этом изображении показан результат запуска программы с 1.
в качестве аргумента glutWireCube
:
Как видите, куб не центрирован вокруг (0,0,0), как указано в документации:
Куб центрируется при моделировании
начало координат (...) (источник)
Если я запускаю программу с 5.
в качестве аргумента, куб смещается еще дальше:
Почему это так, и как мне разместить кубики вокруг (0,0,0)?
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ
Неважно, если я переключу порядок axis()
и glutWireCube
. Окружение axis()
с glPushMatrix()
и glPopMatrix()
тоже не исправляет.
РЕШЕНИЕ
Я изменил gluPerspective
, чтобы начать смотреть дальше от камеры, и теперь Z-буферизация работает правильно, поэтому ясно, что кубы расположены вокруг начала координат.