Предлагаемый метод работает с проекциями граней на картинную плоскость.

В качестве первого шага производится сортировка всех граней по глубине (front-to-back).

Затем из списка оставшихся граней берется ближайшая грань А и все остальные грани обрезаются по этой грани; если проекция грани В пересекает проекцию грани А, то грань В разбивается на части так, что каждая часть либо содержится в грани А, либо не имеет с ней общих внутренних точек.

Таким образом, получаются два множества граней: Fin - грани, проекции которых содержатся в проекции грани А (сюда входит и сама грань А), и Fout - грани, проекции которых не имеют общих внутренних точек с проекцией грани А.

Множество Fin обычно называют множеством граней, внутренних по отношению к А.

Далее все грани из множества Fin, лежащие позади грани А, удаляются (грань А их полностью закрывает).

Однако в множестве Fin могут быть грани, лежащие к наблюдателю ближе, чем сама грань А (это возможно, например, при циклическом наложении граней). В этом случае каждая такая грань используется для рекурсивного разбиения всех граней из множества Fin (включая и исходную грань А). Когда рекурсивное разбиение завершится, то все грани из первого множества выводятся и из набора оставшихся граней выбрасываются (их уже ничто не может закрывать). Затем из набора оставшихся граней Fou[ берется очередная грань и процедура повторяется.

Для учета циклического наложения граней используется стек граней, по которым проводится разбиение. Когда какая-то грань оказывается ближе, чем текущая разбивающая грань, то сначала проверяется, нет ли уже этой грани в стеке. Если она там присутствует, то рекурсивного вызова не производится.

Рассмотрим простейший случай двух граней А и В (рис. 10.44).

Будем считать, что грань А расположена ближе, чем грань В. Тогда на первом шаге для разбиения используется именно грань А. Грань В разбивается на Две части. Часть В\ попадает в первое множество и, так как она лежит дальше грани А, удаляется.

После этого выводится грань А и в списке оставшихся граней остается только грань Я2- Так как кроме нее других граней не осталось, то эта грань выводится, и на этом работа завершается.


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