10.7.1. Какие пикселы ребра принадлежат полигону?

Типичная сцена состоит из нескольких полигонов, причем некоторые из них (например, два) располагаются рядом и в силу этого имеют общее ребро. О таких полигонах говорят, что они примыкают (abut) друг к другу. Если мы не будем внимательны, то рассматриваемый нами алгоритм может присвоить пикселам общего ребра сначала цвет одного полигона, а затем цвет другого. Такое повторное рисование ребра может привести к нежелательному результату: общее ребро приобретет неестественный цвет, если приложение производит рисование в режиме XOR, или же двойное рисование приведет к слишком яркому цвету, если рисунок посылается на фоторегистрирующее устройство. Следовательно, алгоритм должен решить, какой полигон «владеет» каждым ребром, тогда каждое ребро будет принадлежать только одному из двух полигонов.

Средства для растровой графики

Хорошо работающее правило заключается в том, что полигон владеет своими левыми ребрами (в случае горизонтальных ребер - своими нижними). Тогда в случае примыкающих полигонов (рис. 10.30) ребро принадлежит правому полигону и рисуется только один раз цветом этого полигона. Если общее ребро горизонтально, то оно рисуется цветом верхнего полигона. На рисунке на примере простых треугольников показаны четыре возможных варианта общего ребра для двух полигонов. В каждом из приведенных на рисунке случаев общее ребро рисуется цветом полигона В.

Общее ребро принадлежит полигону В

Рис. 10.30. Общее ребро принадлежит полигону В

Как применяется это правило при выполнении команды «закрашиваем серии пикселов между всеми парами пересечений» («Fill pixel runs between all pairs of intersections»)?

На рис. 10.31 приведен пример полигона Р с девятью вершинами. Те пикселы, центры которых лежат внутри полигона Р, закрашиваются; однако какие из пикселов, центры которых лежат на самих ребрах, следует закрашивать? Поскольку левое и нижнее ребро принадлежат полигону Р, то пикселы, лежащие на этих ребрах, закрашиваются, в то время как пикселы на правом и верхнем ребрах - нет. Тогда при закрашивании интервала строки развертки между двумя пересечениями этот интервал включает в себя крайний левый пиксел, если он лежит на ребре, но не включает такой же крайний правый пиксел. Это правило не затрагивает ни одного пиксела, принадлежащего другим полигонам сверху и справа от полигона Р. (Проверьте и убедитесь, что на рис. 10.31 это правило соблюдается.)


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