Отметим, однако, что данная команда отображает видимые и невидимые края.
Чтобы убрать невидимые линии с каркасного изображения, можно воспользоваться методом сдвига по глубине, описанным в разделе 4.14. Следовательно, вначале с помощью цвета переднего плана задается каркасная версия объекта, затем сдвигом по глубине задается схема заполнения внутренней части и цвет фона для внутреннего заполнения. Сдвиг по глубине гарантирует, что заполнение цветом фона не будет мешать изображению видимых краев. Например, в следующем фрагменте кода генерируется каркасное изображение объекта с использованием белого цвета переднего плана и черного цвета фона.
glEnable (GL_DEPTH_TEST);
glPolygonMode (GL_FRONT_AND_BACK, GL_LINE); glColor3f (1.0, 1.0, 1.0);
/* Вызывается процедура описания объекта. */ glPolygonMode (GL_FRONT_AND_BACK, GL_FILL); glEnable (GL_POLYGON_OFFSET_FILL); glPolygonOffset (1.0, 1.0); glColor3f (0.0, 0.0, 0.0);
/* Снова вызывается процедура описания объекта. */ glDisable (GL_POLYGON_OFFSET_FILL); ФУНКЦИИ OpenGL ЗАТУХАНИЯ С ГЛУБИНОЙ
Яркость объекта можно менять как функцию его расстояния от точки наблюдения, используя функцию
glEnable (GL_FOG);
glFogi (GL_FOG_MODE, GL_ LINEAR); Данные команды применяют линейную функцию глубины, записанную в уравнении (9.9), к цветам объекта, используя dmjn = 0,0 и dmax = 1,0. Однако можно задать и другие значения для dm\n и dmax, вызывая следующие функции.
glFogf (GL_FOG_START, minDepth); glFogf (GL_FOG_END, maxDepth); В данных функциях параметрам minDepth и maxDepth присваиваются значения с плавающей запятой, хотя, изменив суффикс функции на i, можно будет использовать целые значения.
Кроме того, с помощью функции glFog можно задать цвет атмосферы, который будет объединяться с цветом объекта после применения линейной функции затухания с глубиной. Можно также смоделировать другие атмосферные эффекты. Соответствующие возможности обсуждаются в разделе 10.20.
РЕЗЮМЕ
Простейшей проверкой видимости является алгоритм исследования задних граней, быстрый и эффективный для начального отсеивания, устраняющего из дальнейших проверок на видимость значительное число многоугольников. Для одного выпуклого многогранника выявление задних граней исключает все невидимые поверхности, но в общем случае выявление задних граней не позволяет полностью найти все невидимые поверхности.
Распространенным методом определения всех видимых поверхностей на сцене является алгоритм буфера глубины. При применении к стандартным графическим объектам данная процедура является весьма эффективной, но с ее использованием связаны дополнительные требования к памяти. Для работы метода нужно два буфера: один для хранения цветов пикселей и один для хранения значений глубины для положений пикселей. Для обработки каждого многоугольника на сцене (расчета глубин поверхностей) используются быстрые последовательные методы строк развертки. При обработке каждой последующей поверхности два буфера обновляются. Расширением подхода буфера глубины является метод A-буфера, который предоставляет дополнительную информацию, необходимую для защиты от наложения и отображения прозрачных поверхностей.