Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Свойства материала в OpenGL Грани






Гранью называется сторона многоугольника. Причем в качестве многоугольника могутвыступать как простейший треугольник, так и сложный многоугольник, лежащий в одной плоскости. Все сложные трехмерные объекты в OpenGL апроксимируются многоугольниками. Каждый многоугольник имеет две стороны, т. е. две грани, — лицевую и обратную. Очевидно, что только одна грань может быть видима в окне в текущий момент времени. Для того, чтобы не тратить время на воспроизведение невидимых граней, в OpenGL реализован механизм, позволяющий различать лицевые и обратные грани.

При рассмотрении многоугольных примитивов уже говорилось о важности порядка обхода вершин. Грани различают после того, как многоугольник спроецирован в окно. Рассматривается, в какой последовательности обходятся вершины многоугольника и принимается решение о типе грани.

Если они обходятся по часовой стрелке, то видимой является одна из граней; если против часовой стрелки, то другая.

Выбор, какую грань считать лицевой, а какую обратной, осуществляется при помощи команды

glFrontFace(Glenum mode),

которая позволяет определить тип грани в зависимости от направления обхода многоугольника — по часовой стрелке или против. Направление обхода задается параметром mode, который может принимать значения GL_CW — по часовой стрелке и GL_CCW — против часовой стрелки (установлено по умолчанию).

Команда:

glCullFace(GLenum mode)

позволяет указать какие грани - лицевые или обратные будут исключены из рассмотрения. Параметр mode может принимать одно из двух значений: GL_FRONT — для лицевых и GL_BACK — для обратных граней (последнее используется по умолчанию).

Для того, чтобы разрешить OpenGL отбирать изображаемые грани, необходимо выполнить команду glEnable с аргументом GL_CULL_FACE. Блокировка этого режима как обычно осуществляется командой gIDisable с тем же аргументом.

Прежде, чем переходить к описанию способов задания свойств материалов, отметим различный смысл похожих параметров у источников света и материалов. В обоих случаях мы определяем цветовые характеристики. Однако у источников света эти характеристики соответствуют процентному отношению цветов в конкретной составляющей светового потока, испускаемого источником. Например, если мы определили диффузную составляющую источника как (1, 1, 1, 0), то это означает, что в световом потоке, исходящем от источника, присутствует свет, способный диффузно отразиться от поверхности. В его состав входят красный, синий и зеленый цвета в равных пропорциях и при максимальной интенсивности. В общем, такой свет можно охарактеризовать как белый.

У материалов аналогичные характеристики определят степень отражения составляющих цветов. Так если мы зададим диффузную компоненту материала как (0.5, 0, 0, 0), то данное определение будет означать, что данный материал диффузно отражает только красный свет и с половинной интенсивностью. А зеленый и синий цвета будут полностью поглощены поверхностью объекта. В результате освещения этого объекта рассмотренным источником поверхность объекта будет выглядеть темно-красной.

Если осветить данный объект источником с диффузной составляющей равной (0, 1, 1, 0), то он будет выглядеть черным.

Таким образом, общая, диффузная и зеркальная составляющие отраженного поверхностью света будут рассчитываться по следующей схеме (LR*MR, LG*MG, LB*MB). Где (LR, LG, LB) – цветовые характеристики составляющей падающего света, а (MR, MG, MB) – характеристики отражения поверхностью данной составляющей.

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

Рассмотрим команду:

glMaterial[i f] [v](face GLenum, pname GLenum, params GLtype).

Параметры материала, как и во многих других случаях, различаются для лицевой и обратной поверхностей. Параметры лицевой грани используются для точек, линий, битовых массивов и всех многоугольников, когда заблокировано двустороннее освещение, или только для лицевых, если двустороннее освещение разрешено. К каким поверхностям применяются задаваемые параметры, определяется аргументом face, который может принимать следующие значения: GL_FRONT, GL_BACK, GL_FRONT_AND_BACK.

Аргумент pname определяет, какие параметры материала будут обновляться. Для скалярной версии команды он может принимать только одно значение — GL_SHININESS, задающее степень зеркального отражения материала. Для векторной версии можно использовать следующие значения:

GL_AMBIENT - Параметр params содержит четыре целых или вещественных значения цветов RGBA, которые определяют рассеянный цвет материала. По умолчанию значение рассеянного цвета равно (0.2, 0.2, 0.2, 1.0);

GL DIFFUSE - Параметр params содержит четыре целых или вещественных значения RGBA, которые определяют цвет диффузного отражения материала. По умолчанию значение диффузного цвета равно (0.8, 0.8, 0.8, 1.0); эта составляющая оказывает наибольшее влияние на результирующий цвет объекта. Обратите внимание. При смешивании цветов значения альфа компоненты всех других параметров игнорируется. Учитывается только альфа компонента, заданная для диффузного отражения.

GL SPECULAR - Параметр params содержит четыре целых или вещественных значения RGBA, которые определяют цвет зеркального отражения материала. По умолчанию значение зеркального цвета равно (0.0, 0 0, 0.0, 1.0).

GL_EMISSION - Параметр params содержит четыре целых или вещественных значения RGBA, которые определяют интенсивность излучаемого света материалом. По умолчанию значение излучаемого света равно (0.0, 0.0, 0.0, 1.0). Данное свойство используется для имитации фосфора и люминофоров, а так же для отображения источников света.

GL_SHININESS - Параметр params содержит одно целое или вещественное значение, которые определяют степень зеркального отражения материала. Можно использовать только значения от 0 до 128. По умолчанию установлено значение 0. Напомним что интенсивность зеркального отражения расчитывается на основе модели Фонга Is = Ilw(q, l)cosna и данный параметр определяет n — степень, аппроксимирующую пространственное распределение зеркально отраженного света.

GL_AMBIENT_AND_DIFFUSE - Эквивалентно двум вызовам команды с аргументами рnате, равными GL_AMBIENT и GL_DIFFUSE, и одинаковыми значениями параметра params

GL_COLOR_INDEXES - Параметр params содержит три целых или вещественных значения, определяющих индексы цветов для рассеянного, диффузного и зеркального отражения соответственно.

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

Наряду с только что рассмотренной командой, для установки параметров материала в OpenGL реализована еще одна:

glColorMaterial(face GLenum, mode GLenum)

У этой команды аргумент face может принимать те же значения, что и в команде gIMaterial, а аргумент mode — только значения GL_AMBIENT_AND_DIFFUSE, GL_AMBIENT, GL_EMISSION, GL_DIFFUSE и GL_SPECULAR. По умолчанию используется GL_AMBIENT_AND_DIFFUSE. Если разрешен режим GL_COLOR_MATERIAL (вызовом команды glEnable с соответствующим аргументом), то параметры поверхностей материала, заданные аргументами mode и face, принимают значения текущего цвета. В этом случае можно изменять параметры материала для каждой вершины, используя только команду glColor, без дополнительного вызова gIMaterial, что в некоторых случаях является более удобным.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.