Иногда бывает предпочтительнее визуализировать криволинейные поверхности непосредственно. Был разработан целый ряд методов [Catmull, 40; Blinn, 27, Lane, 129; Clark, 41; Blinn, 28] решения задач HSR и визуализации параметрически заданных фрагментов поверхностей (лоскутов). Здесь мы рассмотрим эти проблемы и опишем один из методов, признанный очень удачным.

На рис. 13.20 изображена совокупность лоскутов, сопряженных друг с другом и образующих единую криволинейную поверхность. Видно, что строка развертки г/ == г/, пересекает один из лоскутов в некоторой точке ее контура.

Кэтмулл [Catmull, 40] разработал метод, в котором каждый лоскут рекурсивно разбивается на четыре лоскута - до тех пор, пока проекция лоскута не станет покрывать не более одного пиксела. С помощью буфера глубины определяется, является лп данный лоскут ближайшей к глазу поверхностью, видимой в текущий момент в этом пикселе, и если это так, то пиксел рисуется. Псевдокод этого метода приведен в листинге 13.8.

Нахождение точек пересечения ребра Е с ребрами грани Р

Рис. 13.19. Нахождение точек пересечения ребра Е с ребрами грани Р

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

Рис. 13.20. Визуализация нескольких фрагментов поверхности Листинг 13.8. Метод Кэтмулла разбиения лоскутов (псевдокод)

push all patches onto a stack"opengl1_910.html">⇐ Предыдущая| |Следующая ⇒