Обычно освещённость некоторой точки, принадлежащей грани в пространстве, складывается из рассеянной освещённости и диффузного отражения — потока света, отражающегося от поверхности объекта. Иногда к ним добавляют зеркальное отражение — поток света, отражающийся от внешней поверхности объекта под тем же углом, под которым он падал на эту поверхность. Однако в данной работе зеркальное отражение света не учитывается, так как расчёт интенсивности зеркального отражения, например по модели Фонга, требует немалых вычислительных затрат. Для него требуется рассчитывать угол между вектором наблюдения и вектором отражения и возводить косинус этого угла в некоторую степень, зависящую от свойств поверхности.
Диффузное отражение присуще матовым поверхностям. Матовой можно считать такую поверхность, размер шероховатостей которой настолько велик, что падающий луч рассеивается неравномерно во все стороны. Такой тип отражения характерен, например, для гипса, песка, бумаги. Диффузное отражение описывается законом Ламберта, согласно которому интенсивность отраженного света пропорциональна косинусу угла между направлением на точечный источник света и нормалью к поверхности.
Рис. 2.1.7.1. Матовая поверхность
,где
- интенсивность источника света, - коэффициент, который учитывает свойства материала поверхности. Интенсивность отраженного света не зависит от расположения наблюдателя.Матовая поверхность имеет свой цвет. Наблюдаемый цвет матовой поверхности определяется комбинацией собственного цвета поверхности и цвета излучения источника света (в данной работе цвет излучения источника считается белым, поэтому учитывается только цвет поверхности).
Можно еще усовершенствовать модель отражения, если учесть, что энергия от точечного источника света уменьшается пропорционально квадрату расстояния. Использование такого правила вызывает сложности, поэтому на практике часто реализуют модель, выражаемую эмпирической формулой
,
где R – расстояние от источника света до рассматриваемой точки поверхности, k – произвольная константа, предотвращающая деление на 0.
Для определения косинуса угла между вектором нормали к поверхности и вектором, определяющим положение источника света в пространстве, следует воспользоваться скалярным произведением. Пусть имеется вектор нормали
и две точки – , принадлежащая поверхности, и , определяющая положение источника. Вектор, направленный от точки поверхности к источнику света, имеет следующие координаты: . Тогда , , ,или
.Следовательно
.Однако в программе используются, как правило, единичные вектора нормалей, что в данном случае позволяет уменьшить количество требуемых вычислений. В итоге:
,или, более развернуто,
.Далее рассматриваются методы закрашивания поверхности, реализованные в данной работе.
2.1.7.1 Однотонная закраска (метод гранения)
Это наиболее простой и требующий наименьших вычислительных ресурсов метод закраски поверхности. Цвет всей поверхности рассчитывается согласно закону Ламберта. В результате, при малом количестве граней, многогранник выглядит именно как многогранник, так как цвета отдельных граней существенно отличаются. Тем не менее, создается эффект объемности изображения.
Метод гранения позволяет получать изображения, сравнимые по качеству с реальными объектами, лишь при выполнении следующих условий:
· источник света находится на большом расстоянии от объекта;
· наблюдатель находится на большом расстоянии от объекта;
· каждая грань тела является гранью многогранника, а не аппроксимирующей поверхностью;
· поверхность аппроксимирована большим числом небольших плоских граней.
Рис. 2.1.7.1.1. Изображение, полученное методом гранения
2.1.7.2 Метод Гуро
Этот метод предназначен для создания иллюзий гладкой криволинейной поверхности, описанной в виде многогранников или полигональной сетки с плоскими гранями. Если каждая плоская грань имеет один постоянный цвет, определенный с учетом отражения, то различные цвета соседних граней очень заметны, и поверхность выглядит именно как многогранник. Казалось бы, этот дефект можно замаскировать с помощью увеличения количества граней при аппроксимации поверхности, Но зрение человека имеет способность подчеркивать перепады яркости на границах смежных граней – такой эффект называется эффектом полос Маха. Поэтому для создания иллюзии гладкости нужно намного увеличить количество граней, что приводит к существенному замедлению визуализации.
Метод Гуро основывается на идее закрашивания плоской грани не одним цветом, а плавно изменяющимися оттенками, вычисляемыми путем билинейной интерполяции цветов примыкающих граней. Закрашивание граней по методу Гуро осуществляется в четыре этапа:
· вычисляются нормали к каждой грани;
· определяются усредненные нормали в вершинах - производится усреднение нормалей примыкающих граней. На иллюстрации приведен пример – вектор нормали в вершине a равен
;·
Рис. 2.1.7.2.1. Нормаль в вершине
· на основе усредненных нормалей в вершинах вычисляются значения интенсивностей в вершинах согласно принятой модели отражения;
· производится закрашивание грани цветом, соответствующим линейной интерполяции значений интенсивности в вершинах.
Определение интерполированных значений интенсивности отраженного света в каждой точке грани (и, следовательно, цвет каждого пикселя) удобно выполнять во время цикла заполнения полигона (например, совместить его с реализацией алгоритма Z-буфера). Далее рассматривается заполнение грани горизонталями в экранных координатах.
Рис. 2.1.7.2.2. Интерполяция значений интенсивности
Интерполированная интенсивность I в точке (X, Y) определяется исходя из пропорции
.Отсюда
.Значения интенсивностей I1 и I2 на концах горизонтального отрезка представляет собой интерполяцию интенсивности в вершинах:
; или , .Рис. 2.1.7.2.3. Изображение, получено методом Гуро
Этот метод закраски аналогичен методу Гуро, но при использовании метода Фонга для определения цвета в каждой точке интерполируются не интенсивности отраженного света, а векторы нормалей.
Последовательность действий такова:
· определяются нормали к граням;
· по нормалям к граням определяются усредненные нормали в вершинах. В каждой точке закрашиваемой грани определяется интерполированный вектор нормали;
· по направлению векторов нормали определяется цвет точек грани в соответствии с принятой моделью отражения цвета.
Как уже было сказано, метод заключается в интерполяции вектора нормали. Для интерполяции будут использоваться векторы
, исходящие из начала координат плоскости проецирования и параллельными соответствующим нормалям в вершинах a, b и c.Рис. 2.1.7.3.1. Интерполяция векторов нормалей
Нахождение
и производится следующим образом: