сортируем список faces[] по значениям поля extent.far; рисуем грани целиком в порядке от дальней к ближней.

Отметим, что в данном алгоритме присутствует процедура сортировки. Сортировка в той или иной форме является неотъемлемой частью большинства HSR-алгоритмов, поскольку обрабатываемые алгоритмом объекты должны каким-либо образом упорядочиваться. (Разнообразные подпрограммы сортировки можно найти в любом тексте, посвященном структурам данных и алгоритмам).

В каких случаях работает алгоритм беспечного художника? На рис. 13.6 приводятся различные ситуации взаимного расположения двух граней А и В. Каждая ситуация включает в себя взаимодействие двух ортографических проекций. На нижнем рис. 13.6, а показан трехмерный порт просмотра так, как он виден смотрящему на экран наблюдателю, поэтому здесь показаны оси х и у. На верхнем рисунке порт просмотра показан сверху, поэтому глубина увеличивается снизу вверх, в направлении возрастания z. (Из этих двух представлений можно сформировать в уме трехмерную картину - это непросто, зато очень полезно.)

На рис. 13.6, а крайние значения по х (назовем их лг-экстентами) ХА и Хв граней А и В перекрываются, то же касается и крайних значений по у (г/-экстентов) YA и YB, поэтому можно предположить, что одна из граней заслоняет другую. В случае, приведенном на рисунке, одна грань действительно закрывает другую. Однако в силу того, что их z-экстенты не перекрываются, алгоритм беспечного художника работает правильно. У грани A extent, far больше, поэтому она рисуется первой, а грань В позже. Здесь не может получиться, что грань А частично перекроет грань В.

На рис. 13.6, б положения граней лишь немного отличаются от первого рисунка, но ситуация совершенно другая. Грань А более удалена в соответствии с критерием extent.far, поэтому она рисуется первой, в результате чего получается результат, помеченный на рисунке как «неправильно». Однако в действительности - в силу своей ориентации - грань А находится ближе в том месте, где она находит на грань В, поэтому она должна заслонять грань В, как показано на рисунке, помеченном как «правилъ-


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