
- •4. 3. Архитектура видеоадаптеров ega и vga
- •Монитор
- •Видеопамять
- •Текстовый режим
- •Знакогенератор
- •Атрибуты символов
- •Атрибуты символов (монохромный режим)
- •Видеопамять в графических режимах
- •Режимы 4 и 5
- •Режим 6
- •Режимы 0Dh и 0Eh
- •Режим 0Fh
- •Режим 10h
- •Режим 11h
- •Режим 12h
- •Режим 13h
- •5. 7. Видеоадаптеры svga
- •Видеопамять svga
- •Слоеный пирог
- •Увидеть весь мир через замочную скважину
- •Больше цветов больше бит
- •Стандарт vesa
- •6. 11.1. Введение
- •11.2. Преобразование отрезков из векторной формы в растровую
- •Простейший пошаговый алгоритм
- •Алгоритм Брезенхэма для отрезков прямых
- •11.3. Растровая развертка литер
- •Пропорциональное размещение литер. Нижние выносные элементы
- •17,18 Введение в модели закрашивания
- •Геометрические составляющие для нахождения отраженного света.
- •Вычисление диффузионной составляющей
- •Зеркальное отражение
- •Фоновые источники и фоновые отражения
- •Комбинирование компонентов освещения
- •Добавление цвета
- •[Править] Описание алгоритма
- •0.6.1 Двумерный алгоритм Коэна-Сазерленда
- •[Править] Достоинства
- •[Править] Недостатки
- •О трассировке лучей
- •Матрицы и вектора
- •Обратная трассировка лучей Определение цвета точки. Текстурные карты и свойства материалов
- •16 15. Цвет в компьютерной графике
- •Перспективная проекция
- •10 Лекции по компьютерной графике
- •3.1. Координаты и преобразования
- •3.3. Преобразование в однородную систему координат
- •Поворот вокруг фиксированной точки
- •[Править] Отличия от ega
- •[Править] Текстовые режимы
- •[Править] Графические режимы
- •[Править] Стандартные графические режимы
- •[Править] Нестандартные графические режимы (X-режимы)
Геометрические составляющие для нахождения отраженного света.
Для того чтобы вычислить диффузный и зеркальный компоненты света, нам необходимо найти три главных вектора, необходимых для нахождения количества света, попадающего в глаз из точки P:
--нормаль m к поверхности в точке P;
--вектор v, соединяющий точку P с глазом наблюдателя;
-- вектор s, соединяющий точку P с источником света.
Углы между этими тремя векторами составляют основу для вычисления интенсивностей освещения. Обычно эти углы вычисляются в мировых координатах, поскольку при некоторых преобразованиях (таких, как перспективное преобразование) углы не сохраняются.
Вычисление диффузионной составляющей
Предположим,
что свет падает от точечного источника
на одну сторону микрограни
(faset)
поверхности. Какая-то доля света с этой
стороны микрограни переизлучается во
всех направлениях. А какая-то часть этой
переизлучаемой доли достигает глаза с
интенсивностью, обозначаемой
.
Как зависит
от направлений m,
v
и s?
Поскольку
рассеяние одинаково во всех направлениях,
ориентация микрограни относительно
глаза не имеет значения. Поэтому
не зависит от угла между векторами m
и v
(кроме случая v
m<0,
тогда
=0).
С другой стороны, количество света,
освещающего данную микрогрань,
зависит от
ориентации микрограни по отношению к
источнику света: оно пропорционально
<<наблюдаемой>> источником площади
этой микрограни, то есть видимой площади
микрограни.
На
рис. 8.10, а) в сечении показан точечный
источник, освещающий микрогрань S,
для случая, когда вектор m
параллелен вектору s.
На рис.8.10, б) микрогрань отвернута в
сторону от источника света на угол
.
Теперь видимая площадь составляет
только долю, равную
,
от той, что была раньше, так что яркость
микрограни S
уменьшится во столько
же
раз. Это соотношение между яркостью и
ориентацией поверхности часто называют
законом
Ламберта (Lambert).
Отметим, что для малых углов
яркость слабо зависит от угла, поскольку
косинус в окрестностях нуля изменяется
медленно. Однако при приближении угла
к
яркость
быстро снижается до нуля. Далее, нам
известно, что
является скалярным произведением ортов
s
и m.
Тогда можно получить следующее выражение
для интенсивности диффузного компонента:
где
-
интенсивность источника света,
-
коофициент
диффузного отражения
(diffuse
reflection
coefficient).
Отметим, что если микрогрань направлена
в сторону от глаза, то это скалярное
произведение отрицательно, и в этом
случае мы принимаем
Следовательно, более точная формула
для диффузного компонента имеет вид:
(8.1)
Зеркальное отражение
Реальные объекты не рассеивают свет равномерно во всех направлениях, поэтому к модели закраски добавляется зеркальный компонент. Зеркальное отражение порождает блики, которые могут существенно увеличить реалистичность изображения, заставив объекты блестеть. В данном разделе мы рассмотрим простую модель поведения отраженного света по Фонгу (Fhong, 162). Эта модель легко реализуется, и Open GL поддерживает хорошее приближение к ней. Блики, создаваемые отраженным светом по Фонгу, придают объекту вид сделанного из пластмассы, поэтому модель Фонга хороша, когда предназначается для объектов, выполненных из блестящего пластика или стекла. С объектами, имеющими блестящую металлическую поверхность, данная модель работает хуже, однако, как мы увидим, путем тщательного подбора параметров цвета с помощью Open GL аппроксимация по-прежнему возможна. Разработаны более современные модели отражения света, которые лучше работают
С блестящими металлами. Поскольку такие модели не поддерживаются впрямую в рамках процесса визуализации Open GL, мы отложим их обсуждение до главы 14, где рассматривается трассировка лучей.
На рис. 8.12, а) показана ситуация, в которой свет от источника падает на поверхность и отражается в различных направлениях. Согласно модели Фонга, количество отраженного света имеет наибольшую величину в направлении абсолютного зеркального отражения (вектор r), когда угол отражения равен углу падения. Именно в этом направлении отразился бы весь свет, если бы поверхность была абсолютным зеркалом. При других углах, близких к этому, количество отраженного света быстро убывает, о чем свидетельствуют относительные длины векторов отражения. На рис. 8.12, б) это распределение показано в виде <<пучка лучей>>, известного специалистам по радарам. Расстояние от точки Р до огибающей пучка лучей показывает относительную силу света, рассеянного в данном направлении.
На рис. 8.12, в) показано, как оценить влияние пучка. Из главы 4 нам известно, что направление
r
полного
отражения зависит от вектора s
и нормали m
к поверхности
следующим образом:
(направление зеркального отражения).
(8.2)
Для
блестящих поверхностей не являющихся
абсолютно зеркальными, количество
отраженного света убывает с ростом
модуля угла
между векторами r
и v.
Истинное количество этого убывания
является сложной функцией от
,
однако в модели Фонга данная зависимость
предполагается равной некоторой степени
f
от косинуса
,
то есть
,
где значение f
подбирается экспериментально и обычно
лежит в пределах от 1 до 200. На рис. 8.13
показан график изменения функции
интенсивности в зависимости от угла
для различных значений f.
С
ростом параметра f
отражение становится все более зеркальным
и все более концентрируется вдоль
направления r.
При f=
можно было бы смоделировать абсолютное
зеркало, однако чистые отражения обычно
обрабатывают другим способом, как
описано в главе 14.
Используя
тот факт, что
равен скалярному произведению векторов
u
и
v
(после их
нормирования), можно смоделировать
вклад
в зеркальное отражение следующим
образом:
,
(8.3)
где
множитель
называется коэффициентом
зеркального отражения
(specular reflection
coefficient). Подобно большинству коэффициентов в модели закрашивания, он обычно определяется экспериментально. (Как и в случае диффузного члена, при отрицательном скалярном произведении r*v значение устанавливается равным нулю.)
Повышение
эффективности с помощью <<промежуточного
вектора>>. Вычисление
члена уравнения (8.3), соответствующего
зеркальному отражению, может оказаться
слишком дорогостоящим, поскольку при
этом требуется вначале найти вектор
r,
а
затем
нормировать его. На практике для ускорения
вычислений используется альтернативный
член зеркального отражения, который,
вероятно, впервые был описан Блинном
(Blinn,
24) и используется для ускорения вычислений.
Вместо косинуса угла между векторами
r
и v
ищется
промежуточный ( halfway
) вектор между s
и v,
то есть
h=s+v,
как показано
на рис.8.14. Если бы нормаль к поверхности
была направлена вдоль вектора h,
то наблюдатель увидел бы наиболее яркий
зеркальный блик. Поэтому угол
между
векторами m
и h
можно
использовать для измерения спада
интенсивности зеркального отражения,
которую видит наблюдатель. Угол
не совпадает с углом
( на самом деле угол
вдвое больше, чем угол
,если
все векторы компланарны; см. упражнения
), однако это различие может быть
компенсировано использованием другого
значения показателя f.
( Зеркальный член никоим образом не
основывается на физических принципах,
поэтому по меньшей мере приятно, что
такая его коррекция дает приемлемые
результаты). Обычно принято при вычислении
зеркального члена исходить из
,
используя при этом скалярное произведение
векторов h
и m:
(скорректированный зеркальный член).
(8.4)
Отметим, что при такой коррекции нет необходимости находить вектор отражения r, что экономит время вычисления. Кроме того, если и источник света, и наблюдатель очень удалены, то векторы s и v одинаковы для различных граней объекта, поэтому вектор b понадобится вычислить всего один раз.