В то же время, как отмечалось в главе 8, некоторые особенности данного алгоритма ограничивают его использование.

О Он допускает многократное рисование одного и того же пиксела. Каждый раз, когда для пиксела (х, у) обнаруживается более близкая грань, выполняются дорогостоящие вычисления по ее закрашиванию. Может оказаться, что эти вычисления выполнены впустую, если впоследствии будет найдена еще более близкая грань. Некоторые визуализаторы выполняют грубую сортировку массива faces[], чтобы грани, более близкие к глазу, рисовались первыми. Отсюда следует, что при визуализации более удаленных граней условие проверки глубины if (depth d[x][y]) в большинстве случаев не выполняется, поэтому повторное рисование пикселов сводится к минимуму.

О Для поддержки буфера глубины требуется большое количество памяти (по одной ячейке на каждый пиксел). К тому же в каждой такой ячейке должно храниться число высокой точности - от 16 до 32 бит. (Слегка изменяя терминологию, можно сказать, что данный метод работает с «точностью по изображению» по глубине так же, как и по координатам х и у.) Какую бы точность мы ни выбрали, она все равно может оказаться недостаточной. И когда в буфере глубины не удается различить две очень близкие глубины, может быть нарисована не та грань1. Особенно это проблематично в случае удаленных граней, имеющих псевдоглубины, близкие к своему верхнему пределу. Это происходит вследствие сжатия глубины, характерного для псевдоглубины.

13.3. HSR-методы со списками приоритетов Существует обширный класс HSR-алгоритмов, в которых массив faces [] подвергается сортировке, после чего грани рисуются «от дальних к ближним», так что более близкие грани рисуются поверх более далеких (и, возможно, заслоненных). Эти алгоритмы объединены в так называемые методы со списком приоритетов (list-priority methods), поскольку список faces[] перестраивается по восходящему или нисходящему приоритету, используя определение приоритета, включающее в себя глубину отдельных вершин. Как мы увидим, может вообще не найтись такой перестройки массива, которая приведет к правильной результирующей картинке. Успешно работающий алгоритм должен выявлять такую ситуацию и адекватно реагировать на нее; обычно в таких случаях грань разделяют на две части, которые по отдельности никакого конфликта не вызывают.


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