УДАЛЕНИЕ НЕВИДИМЫХ ЧАСТЕЙ
3.2. Алгоритм художника
Пусть имеется некий набор граней (т.е. сцена), который требуется нарисовать.
Отсортируем грани по удаленности от камеры и отрисуем все грани, начиная с
самых удаленных. Довольно распространенная характеристика удаленности для
грани ABC - это среднее значение z, mid_z = (A.z+B.z+C.z)/3. Вот и весь
алгоритм. Просто, и обычно достаточно быстро.
Существует, правда, несколько проблем.
Во-первых, при некотором расположении граней этот алгоритм вообще не может
дать правильного результата - в каком порядке грани не рисуй, получится
неправильно. Вот стандартный пример.
Во-вторых, при некотором расположении граней и использовании среднего значения
z как характеристики удаленности алгоритм тоже дает неправильный результат.
Пример чуть ниже. В этом случае горизонтальную грань надо отрисовывать второй,
но по среднему значению z она лежит дальше и таким образом получается, что ее
надо отрисовывать первой. Возможные пути решения этой проблемы - какие-то
изменения характеристики удаленности, либо моделирование, не вызывающее таких
ситуаций.
И наконец, при использовании этого алгоритма отрисовываются вообще все грани
сцены, и при большом количестве загораживающих друг друга граней мы будем
тратить большую часть времени на отрисовку невидимых в конечном итоге
частей. То есть совершенно впустую. В таком случае целесообразно использовать
какие-то другие методы (например BSP и PVS, порталы, и т.д).