void LaneCarpenterC.) {

add all patches to the patch table: II добавляем все лоскуты в таблицу лоскутов

initialize the active patch list (APD; Ii инициализируем список активных лоскутов (APD

forieach scan line у) I/ для каждой строки развертки у {

update the APL: II обновляем список APL

for(each patch P in the APL) // для каждого лоскута Р в APL

{

if(P is " planar enough") IIP - «достаточно плоский»

add P to the polygon list; II добавляем P к списку полигонов

else
{

split the patch into subpatches; II разбиваем лоскут на подлоскуты

forieach new subpatch S) II для каждого нового подлоскута S

ifCS st?'77 intersects the scan line) II если S по-прежнему пересекает строку развертки

add S to the APL:

II добавляем S к списку APL

else
add S to the patch table:

II добавляем S в таблицу лоскутов }

}

do scan line HSR process for this scan line for the polygons in the polygon list; ; II выполняем HSR-процесс для данной строки развертки // для полигонов, входящих в список полигонов

}
}

Удаление невидимых поверхностей

В листинге 13.9 представлен псевдокод метода Лэйна-Карпентера. При работе подпрограммы.^се лоскуты прежде всего помещаются в таблицу лоскутов (patch table), напоминающую таблицу ребер, которая применялась для хранения ребер в главе 10. Кроме того, имеется список активных лоскутов (active-patch list), в котором содержатся все лоскуты, пересекающие текущую строку развертки, а также список полигонов (polygon list), содержащий «достаточно плоские» четырехугольники, готовые для визуализации.

Каждый лоскут из списка активных лоскутов тестируется поочередно; если он является достаточно плоским, то аппроксимирующий его плоский четырехугольник помещается в список полигонов для визуализации (поскольку данный лоскут пересекает текущую строку развертки). Если же лоскут недостаточно плоский, то он разбивается на четыре лоскута, и те из них, которые пересекают текущую строку развертки, добавляются в список активных лоскутов. Что касается тех лоскутов, которые не пересекают текущую строку развертки (потому что лежат выше ее), то они отправляются обратно в список лоскутов, чтобы стать активными позднее. Когда все лоскуты из списка для текущей строки развертки обработаны должным образом, по полученному списку полигонов вызывается HSR-процесс построчного сканирования, рисующий вдоль строки развертки нужные полигоны.


⇐ Предыдущая| |Следующая ⇒