Руководство по программированию 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 теперь направлена ​​назад, вдоль оптической оси камеры. Изображение здесь:

Другие вопросы по тегам