Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Введение в модели закрашивания ⇐ ПредыдущаяСтр 3 из 3
Механизм отражения света от текущей поверхности очень сложен и зависит от многих факторов. В модели закрашивания, часто используемой в графике, предполагается, что объекты сцены освещаются двумя типами источников: точечными источниками света и фоновым светом (ambient light). Эти источники света «сверкают» на различных поверхностях объектов, и падающий свет взаимодействует с поверхностью одним из трех возможных способов (рис. 4.1): · некоторая часть поглощается поверхностью и превращается в тепло; · некоторая часть отражается от поверхности; · некоторая часть проходит внутрь объекта, как в случае куска стекла. Если весь падающий свет поглощается, то данный объект воспринимается как черный, поэтому его называют абсолютно черным телом. Если весь свет проходит сквозь объект, то он виден только в результате эффекта рефракции. Рассмотрим ту составляющую света, которая отражается от поверхности или рассеивается ею. Некоторая часть этого отраженного света движется как раз в таком направлении, чтобы достигнуть глаза, вследствие чего объект становиться виден. Количество света, попадающее в глаз, прежде всего, определяется геометрией окружения. Различают два типа отражения падающего света: · диффузное рассеяние происходит, когда часть падающего света слегка проникает внутрь поверхности и излучается обратно равномерно по всем направлениям. Рассеянный свет сильно взаимодействует с поверхностью, поэтому его цвет обычно зависит от природы материала, из которого сделана эта поверхность; · зеркальные отражения больше похожи на зеркало и имеют ярко выраженную направленность: падающий свет не поглощается объектом, а отражается прямо от его наружной поверхности. Это порождает блики, и поверхность выглядит блестящей. Считается, что суммарное количество света, отраженного от поверхности в определенном направлении, складывается из диффузного и зеркального компонентов. Использование источников света в OpenGL Создание источника света OpenGL позволяет задать до восьми источников с именами GL_LIGHT0, GL_LIGHT1 и т.д. Каждый источник обладает различными свойствами и должен быть задействован (включен). У каждого его свойства имеется значение по умолчанию. Например, для создания источника, расположенного в точке (1, 2, 2) в мировых координатах, следует выполнить следующий код:
Листинг 2. Пример создания источника света GLfloat myLightPosition[] = {1.0, 2.0, 2.0, 1.0}; glLightfv(GL_LIGHT0, GL_POSITION, myLightPosition); glEnable(GL_LIGHTING); // Включение расчета освещенности glEnable(GL_LIGHT0); // включаем этот конкретный источник Массив myLightPosition[] (имя можно использовать любое) определяет положение источника света и передается в функцию glLightfv() вместе с именем источника GL_LIGHT0, для того чтобы связать его с конкретным источником, обозначенным именем GL_LIGHT0. Некоторые источники, такие как настольная лампа, находятся «внутри» сцены, в то время как другие, например солнце, бесконечно удалены от сцены. OpenGL позволяет создавать источники света обоих типов посредством задания положения источника в однородных координатах. Тогда мы имеем (x, y, z, 1): локальный источник света в положении (x, y, z) и (x, y, z, 0): вектор к бесконечно удалённому источнику света в направлении (x, y, z). Бесконечно удаленные источники света часто называют «направленными». Существуют определенные вычислительные преимущества в использовании направленных источников света, поскольку направление при вычислении диффузного и зеркального отражений одинаково для всех вершин данной сцены. Однако направленные источники света не всегда являются наилучшим выбором: некоторые визуальные эффекты достигаются только тогда, когда источник света расположен близко к объекту. Можно также разложить источник света на различные цвета. OpenGL позволяет присвоить различный цвет каждому из трех типов света, испускаемого источником: фоновому, диффузному и зеркальному. С помощью приведенного ниже кода определяются массивы для хранения цветов, испускаемых источниками света. Эти массивы затем передаются в функцию glLightfv(): Листинг 3. Пример задания цветов, испускаемых источником света GLfloat myAmbient[] = {0.2, 0.4, 0.6, 1.0}; GLfloat myDiffuse[] = {0.8, 0.9, 0.5, 1.0}; GLfloat mySpecular[] = {1.0, 0.8, 1.0, 1.0}; glLightfv(GL_LIGHT0, GL_AMBIENT, myAmbient); glLightfv(GL_LIGHT0, GL_DIFFUSE, myDiffuse); glLightfv(GL_LIGHT0, GL_SPECULAR, mySpecular); Цвета задаются в так называемом формате RGBA, что означает: R ed (красный), G reen (зеленый), B lue (синий) и A lpha (альфа). Величина alpha иногда используется для смешения двух цветов на экране. Для наших целей здесь alpha = 1.0.
Источники света имеют различные значения по умолчанию. Для всех источников: default ambient = (0, 0, 0, 1) фоновый по умолчанию. Наименьшая яркость – черный. Для источника света LIGHT0: default diffuse = (1, 1, 1, 1) диффузный по умолчанию. Наибольшая яркость – белый. default specular = (1, 1, 1, 1) зеркальный по умолчанию. Для других источников света значения диффузного и зеркального компонентов по умолчанию установлены в черный цвет.
Прожекторы Источники света по умолчанию являются точечными источниками. Это означает, что они излучают свет равномерно по всем направлениям. Однако OpenGL позволяет превратить их в прожекторы, так чтобы они излучали свет в ограниченном числе направлений. На рис. 5.1 показан прожектор, нацеленный в направлении d c «углом пропускания» («cutoff angle») α. Угол пропускания α может принимать значения диапазона [0, 90]. В точках, лежащих вне конуса пропускания, свет не виден вообще. Для таких вершин, как Р, которые лежат внутри этого конуса, количество света, достигающего точки Р, пропорционально множителю cosε(β), где β – угол между вектором d и прямой, соединяющей источник с точкой Р. Показатель степени ε лежит в диапазоне [0, 128] и выбирается пользователем так, чтобы обеспечить нужное уменьшение интенсивности света в зависимости от угла. Параметры прожектора устанавливаются следующим образом: с помощью функции glLightf(…) задается его единственный параметр, а с помощью функции glLightfv(…) – вектор: glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 45.0); // угол пропускания равен 45о glLightf(GL_LIGHT0, GL_SPOT_EXPONENT, 4.0); // ε = 4.0 GLfloat myDirection[] = {2.0, 1.0, -4.0}; // направление прожектора glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, myDirection); По умолчанию установлены следующие значения этих параметров: d = (0, 0, -1), α = 180о; ε = 0, что соответствует действующему во всех направлениях точечному источнику света.
|
||||||
Последнее изменение этой страницы: 2021-07-18; просмотров: 39; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.128.171.246 (0.01 с.) |