В общем случае для каждого последующего пиксела вдоль строки развертки глубина каждой покрывающей грани увеличивается. При каждом пересечении с ребром элемент массива соуегегД] для грани

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

устанавливается в true, если эта грань начинается, и в false, если заканчивается; соответственно корректируется и счетчик numCovered. Когда пиксел покрывается более чем одной гранью, то определяется ближайшая из них, после чего вычисляется цвет или оттенок этой грани. Поскольку пересечение ребер происходит относительно редко, то используется связность строки развертки.

После прохода строки развертки L текущая строка развертки увеличивается на единицу, все элементы массива covered[] снова устанавливаются в false, а список активных ребер обновляется, так что он должен точно представлять все пересечения ребер, которые встретятся вдоль новой строки развертки. Обновление списка осуществляется так же, как в варианте закраски полигона, когда для эффективности используется таблица ребер.

Созданы различные модификации данного алгоритма, направленные на увеличение его эффективности и на расширение класса объектов, которые можно визуализировать с его помощью (см. [Foley, 64]).

Практические упражнения

13.4.1. Объекты не являются взаимопроникающими Часто заранее известны некоторые свойства визуализируемых объектов; в ряде случаев эта информация может позволить выбрать более простой HSR-алгоритм. Какие упрощения можно сделать в алгоритме построчного сканирования, если известно, что никакая пара граней не является взаимопроникающей?

13.4.2. Тестирование глубины в пределах серии Покажите, как алгоритм, рассмотренный в данном разделе, «зная» глубины всех покрывающих граней в начале серии, может «заглянуть» в конец этой серии и определить там с помощью простого вычисления все глубины покрывающих граней. Если алгоритм обнаруживает изменение порядка глубин граней, то может ли он найти пиксел, в котором это изменение произошло? Каким образом?


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