Руководство по программированию OpenGL: Глава 3: Просмотр трансформаций: Просмотр объектов со стороны
В тексте Руководства по программированию OpenGL, в Главе 3, раздел "Просмотр трансформаций", авторы предоставляют следующий код для просмотра объекта со стороны, начиная с положения камеры по умолчанию.
glTranslatef(0.0,0.0,-5.0);
glRotatef(90.0,0.0,1.0,0.0);
Когда я попробовал это с растянутым кубом, куб нарисован неправильно (я проверяю это, рисуя оси координат - код для рисования осей не включен). Тем не менее, изменение вызова поворота на glRotatef(-90,0.0,1.0,0.0)
делает правильную вещь. Есть идеи, почему это происходит?
Редактировать: я понял это. Исходный пример рисует куб, растянутый в направлении y OpenGL в 2 раза.'glTranslate
отводит объект на 5 единиц от камеры вдоль оси z. Изображение здесь:
В заключение, glRotate
поворачивает куб на 90 градусов против часовой стрелки, так что мы видим ось z (синюю), а ось x теперь направлена назад, вдоль оптической оси камеры. Изображение здесь:
2 ответа
Вращение на 90 или -90 градусов вокруг оси Y делает то же самое по существу (единственная разница - направление вращения по часовой стрелке или против часовой стрелки соответственно).
Хотя преобразования похожи (и в случае простого куба результаты также должны быть похожими), порядок рендеринга примитивов может быть совершенно другим. Вы включили тест глубины OpenGL?
Решение OP перешло от вопроса к ответу.
Я понял. В исходном примере нарисован куб, растянутый в направлении оси Y OpenGL с коэффициентом 2.
'glTranslate
отводит объект на 5 единиц от камеры по оси z. Изображение здесь:Наконец-то,
glRotate
поворачивает куб на 90 градусов против часовой стрелки, чтобы мы могли видеть ось z (синяя), а ось x теперь направлена назад, вдоль оптической оси камеры. Изображение здесь: