А.В. Куров, К.А. Якиль
6
Такой подход обладает следующими преимуществами. Измене-
ние списка активных ребер происходит быстрее, так как имеется ин-
формация о ребре, которое необходимо добавить.
Пусть есть пара ребер E
1
и E
2
и необходимо удалить ребро E
1
. То-
гда добавляемое ребро есть P
1
P
2
, где P
1
— конечная точка ребра E
1
,
P
2
— конечная точка ребра E
2
.
Для реализации возможности вычисления нормалей в точке с по-
следующим определением ее цвета необходимо знать координату
точки в мировой системе координат (расчет интенсивности происхо-
дит именно в ней).
Для этого вводится дополнительный список активных ребер, хра-
нящий информацию о ребре в мировой системе координат.
Структура такого ребра:
1) текущая точка;
2) вектор приращения значения каждой из координат точки;
3) текущее значение нормали;
4) вектор приращения значения каждой из координат нормали.
Данный подход требует больше памяти для хранения такой
структуры, но увеличивает скорость работы, так как не приходится
вычислять значение нормали в каждой точке ребра, что является тру-
доемкой операцией. Кроме того, обработка такой структуры проис-
ходит в том же порядке и в то же время, в которое происходит обра-
ботка активных ребер (значения которых соответствуют экранным
координатам), поэтому нет необходимости отдельно обрабатывать
такие структуры и, соответственно, тратить процессорное время.
При расположении части сетки за пределами верхней части экра-
на возникает «ребристый край» сетки. Это происходит из-за того, что
те треугольники, чьи минимальные значения координат у вершин
имеют отрицательное значение, не обрабатываются. В программе
массив
Y
-групп расширяется на отрицательные значения, что позво-
ляет корректно отображать поверхность.
В программе реализован учет прозрачности.
Использование общеизвестного алгоритма построчного сканиро-
вания, использующего
Z
-буфер, при учете эффекта прозрачности ве-
дет к возникновению ряда некорректных ситуаций:
1) в вершинах треугольников сетки резко увеличивается интен-
сивность;
2) при экранировании одной волной других волн наблюдается
резкое увеличение интенсивности.
Первая ситуация связана с многократной обработкой вершины
треугольника, так как она является общей сразу для нескольких
треугольников. Поэтому в программе обрабатывается только интер-
вал [
a
;
b
), где
a
— точка левого ребра,
b
— точка правого ребра.