Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Введение в модели закрашиванияСодержание книги
Поиск на нашем сайте
Механизм отражения света от текущей поверхности очень сложен и зависит от многих факторов. В модели закрашивания, часто используемой в графике, предполагается, что объекты сцены освещаются двумя типами источников: точечными источниками света и фоновым светом (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; просмотров: 79; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.119 (0.007 с.) |