Закрашивание

наблюдателя. Дело тут вот в чем. Если наблюдатель расположен достаточно далеко от рассматриваемой сцены, то можно считать, что вектор, задающий направление на наблюдателя, для всех объектов сцены один и тот же. Это довольно существенно сокращает объем вычислений. Если же желательно воспроизвести в изображении все эффекты, связанные с положением наблюдателя относительно отдельных объектов сцены, то следует установить режим "близкого" наблюдателя, воспользовавшись функцией

glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE);

Второй из упомянутых параметров- GL_LIGHT_MODEL_TWO_SIDE- имеет отношение к отображению внутренней и внешней сторон поверхностей. В главе 4 отмечалось, что мы различаем у каждого элементарного многоугольника две стороны - внутреннюю и внешнюю. Какая из сторон будет внутренней, а какая - внешней, определяется порядком задания вершин при формировании многоугольника- правилом правой руки. Для большинства случаев в изображение включается только внешняя сторона поверхности, а потому нас не интересует, как OpenGL выполняет закрашивание внутренней стороны. Например, при отображении таких выпуклых тел, как сфера или параллелепипед, наблюдатель никогда не видит внутренние грани поверхностей, независимо от того, с какой стороны он рассматривает объект (рис. 6.37). Но если удалить одну из граней куба (например, на сцене появилась открытая коробка) или срезать часть сферы, как показано на рис. 6.38, наблюдатель с определенной позиции может "заглянуть" внутрь объекта и увидеть как внешние, так и внутренние его грани. В таком случае от графической системы требуется корректно закрашивать внутренние грани всех поверхностей. Именно такой режим и задается передачей в качестве аргумента функции glLightModel( ) параметра GL_LIGHT_MODEL_TWO_SIDED:

glLightModel(GL_LIGHT_MODEL_TWO_SIDED, GL_TRUE);

В OpenGL источники света являются объектами, во многом такими же, как многоугольники или точки. В частности, геометрические параметры источников света преобразуются матрицей вида, поэтому можно задавать их положение, используя привычные средства преобразования. На них распространяется основное правило обработки координат в OpenGL - параметры, характеризующие положение, преобразуются текущей матрицей вида в момент формирования объекта. Таким образом, формируя источник света одновременно с остальными объектами сцены, его можно "привязать" к этим объектам и затем совместно перемещать в пространстве сцены. Можно поступить и по-другому- сформировать стационарный источник света, который будет оставаться на месте, пока другие объекты перемещаются.


⇐ Предыдущая| |Следующая ⇒