Этот алгоритм можно обобщить для работы с прямыми с отрицательным тангенсом угла наклона или с прямыми, тангенс угла наклона которых больше единицы. Затем это выражение для вычисления параметра р можно включить в алгоритм средней точки для прямой, что позволит определить положения пикселей на сторонах многоугольников и одновременно подобрать интенсивности пикселей на граничных линиях. Кроме того, можно подобрать выражения для вычисления опорных координат пикселей относительно координат их левого нижнего угла и сохранения пропорций площади, о чем говорится в разделе 3.13.
В вершинах многоугольника или в очень тонких многоугольниках (рис. 4.58) через площадь одного пикселя проходит больше, чем одна граничная сторона. В таких случаях для обработки всех сторон, проходящих через данный пиксель, и правильного определения внутренней области приходится несколько изменять алгоритм Питтвея-Уоткинсона.
Методы фильтрации, которые рассматривались для устранения контурных неровностей прямых, также можно применять и к сторонам закрашенных фигур. Различные способы защиты от наложения могут применяться к многоугольникам или к областям с кривыми границами. Для оценки части пикселя, которая перекрывается с фигурой, используются уравнения, описывающие границы этих фигур, а при обработке строк развертки между ними вычисления упрощаются, если применить когерентные методы.
ФУНКЦИИ OpenGL ЗАЩИТЫ ОТ НАЛОЖЕНИЯ
Стандартные процедуры устранения контурных неровностей в OpenGL активизируются с помощью команды
glEnable (primitiveType); Здесь параметру primitiveType присваивается значение одной из символьных констант GL_POINT_SMOOTH, GL_LINE_SMOOTH или GL_POLYGON_SMOOTH. Предположив, что цветовые значения задаются в режиме RGBA, нужно еще активизировать операции OpenGL смешивания цветов.
glEnable (GL_BLEND) ; Далее применяется метод смешивания цветов, описанный в разделе 4.3, и вызывается функция
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); Операции сглаживания будут более эффективными, если для цветовых спецификаций объектов использовать большие значения альфа.
Устранение контурных неровностей может применяться и тогда, когда используются цветовые таблицы. Однако в таком цветовом режиме нужно создавать линейно изменяющийся цветовой шаблон - таблицу оттенков цветов от цвета фона до цвета объекта. Затем этот шаблон используется для устранения контурных неровностей границ объектов.
ФУНКЦИИ ЗАПРОСА В OpenGL
Текущие значения любого параметра состояния, в том числе настройки атрибутов, можно извлекать с помощью функций запроса OpenGL. Эти функции применяются для копирования заданных значений состояния в массив, который можно сохранить для последующего повторного использования или проверки текущего состояния системы, если возникает какая-то ошибка.
Для текущих значений атрибутов используется соответствующая функция “glGet”:
glGetBooleanv ( ) glGetFloatv ( ) glGetlntegerv ( ) glGetDoublev ( )
В каждой из вышеприведенных функций задается два аргумента. Первый аргумент - символьная константа OpenGL, которая определяет атрибут или другой параметр состояния. Второй аргумент - ссылка на массив того типа данных, который указан в имени функции. Например, текущие цветовые настройки в режиме RGBA с плавающей запятой можно извлечь с помощью функции