Моделирование волн на поверхности жидкости
5
где
I
— интенсивность освещения в точке;
I
р
— интенсивность рассе-
янного света;
k
р
— коэффициент диффузного отражения рассеянного
света;
I
и
j
— интенсивность
j
-го источника света;
k
д
— коэффициент
диффузного отражения;
θ
j
— угол, образованный вектором падения и
вектором нормали;
k
з
— коэффициент зеркального отражения;
α
j
—
угол, образованный вектором отражения и вектором нормали;
n
—
степень, аппроксимирующая пространственное распределение зер-
кально отраженного света;
d
j
— расстояние от точки поверхности до
j
-го источника света (обычно для всех источников это расстояние от-
считывается от точки поверхности до центра проекции);
L
— посто-
янная, подбираемая из условия получения более реалистичного изоб-
ражения;
m
— количество источников освещения.
Визуализация поверхности жидкости.
Для визуализации по-
верхности жидкости за основу был взят алгоритм построчного ска-
нирования, использующий
Z
-буфер [1]. Поверхность жидкости
аппроксимируется треугольниками. Преимущества данного пред-
ставления: простое разбиение массива точек на треугольники, обес-
печение хорошей реалистичности отображения поверхности воды
вследствие возможности детального моделирования рельефной по-
верхности, удобство в использовании треугольников в алгоритме по-
строчного сканирования, использующего
Z
-буфер, из-за сведения
оперирования многоугольниками к оперированию треугольниками.
При реализации в алгоритм были внесены некоторые измене-
ния, направленные на его упрощение и повышение быстродей-
ствия. Так как задание поверхности жидкости осуществляется
набором треугольников, то заранее известно, что никаких других
многоугольников во входных данных не поступает. Данное допу-
щение позволяет:
1) не запоминать характеристики треугольника в дополнительном
списке характеристик, а добавить необходимые данные в структуру
ребра. Таким данным является конечная точка ребра. Это преобразо-
вание ведет к ускорению работы алгоритма;
2) не хранить список активных многоугольников, так как работа
ведется с треугольниками, которые представлены как активные ребра
с дополнительной информацией — конечной точкой ребра. Это поз-
воляет экономить память и время, затрачиваемое на обработку спис-
ка
.
Активные ребра изначально заносятся в пару активных ребер в
правильном порядке;
3) не выяснять принадлежность многоугольника, ребро которого
перестало быть активным, к списку активных многоугольников.
Структура активного ребра дополняется точным значением ко-
нечной точки ребра.