glLightModeli(GL_LIGHT_M0DEL_TW0_SIDE. GL_TRUE):

При выполнении этой команды OpenGL изменяет направления нормалей всех нелицевых граней таким образом, чтобы они указывали на наблюдателя, после чего закрашивание осуществляется корректно. Замена величины GL_TRUE на GL_FALSE (принятой по умолчанию) отключает эту опцию. (Замечание. Грани, нарисованные с помощью OpenGL, не отбрасывают теней, поэтому все нелицевые грани Можно заменить этот порядок на обратный с помощью подпрограммы gl FrontFace(GL_CW), в которой обусловлено, что грань является лицевой только в том случае, если ее вершины занесены в список в порядке по часовой стрелке. По умолчанию принято glFrontFace(GLJXW).

Можно ускорить работу компьютера, если запретить OpenGL визуализацию нелицевых граней. При этом используется следующий код: glCu11Face(GL_BACK); glEnable(GL_CULL_FACE):.

Определение лицевой грани в OpenGL

Рис. 8.21. Определение лицевой грани в OpenGL

Визуализация граней для усиления реалистичности

получают от источника такой же свет, даже если между ними и источником света находится какая-нибудь другая грань.)

Перемещение источников света Напомним, что источники света проходят через матрицу моделирования-вида наряду с вершинами. Следовательно, источники света могут быть перемещены с помощью соответствующих вызовов функций glRotatedO и glTranslatedO. Массив position, заданный подпрограммой glLightfv(GL_LIGHT0. GL_P0SITI0N. position), изменяется с помощью матрицы моделирования-вида, что происходит в момент вызова функции glLightfvO. Поэтому для изменения положения источника света с помощью преобразований и для независимого перемещения камеры команду позиционирования источника нужно вставить внутрь стековых скобок «push-pop», как это сделано в следующем коде"opengl1_542.html">⇐ Предыдущая| |Следующая ⇒