АЛГОРИТМЫ ИССЛЕДОВАНИЯ ВИДИМЫХ ПОВЕРХНОСТЕЙ ДЛЯ КАРКАСНЫХ ОБЪЕКТОВ
Прямой подход к определению видимых отрезков заключается в сравнении положений краев с положениями поверхностей на сцене. В данном процессе используются те же методы, что и в алгоритмах отсечения линий. Следовательно, положение конечных точек отрезка проверяется относительно границ заданной области, но при проверке на видимость дополнительно требуется сравнить глубины краев и поверхности. Если обе конечные точки отрезка принадлежат области проекции поверхности, глубина конечных точек сравнивается с глубиной поверхности (х, у) в этих точках. Если обе конечные точки находятся за поверхностью, значит, край скрыт. Если обе конечные точки находятся перед поверхностью, край по отношению к данной поверхности является видимым. В противном случае нужно рассчитать точки пересечения и определить глубины в этих точках пересечения. Если край имеет большую глубину, чем поверхность в точках пересечения периметра, часть края скрыта поверхностью, как показано на рис. 9.28, а. Возможен другой вариант - край имеет большую глубину в одной точке пересечения с границей и меньшую глубину, чем поверхность, в другой точке пересечения с границей (предполагается, что поверхности выпуклые). В этом случае нужно определить, где край проникает внутрь поверхности, как показано на рис. 9.28, б. Определив скрытую часть края, ее можно удалить, изобразить пунктиром или еще как-то визуально выделить, чтобы она отличалась от видимых поверхностей.
Рис. 9.28. Скрытые части линии (пунктир), имеющей большую глубину, чем поверхность (панель я), и расположенной частично за и перед поверхностью (панель б)
Некоторые методы исследования видимых поверхностей легко приспосабливаются к проверке видимости каркаса из краев объекта. Используя метод задних граней, можно определить все задние поверхности объекта и отобразить только границы видимых поверхностей. Используя сортировку по глубине, поверхности можно нарисовать в буфере регенерации так, чтобы внутренние части поверхности имели цвет фона, а границы - цвет переднего плана. Если обрабатывать поверхности от заднего плана к переднему, невидимые линии будут закрываться более близкими поверхностями. Алгоритм удаления невидимых линий можно дополнить методом деления площади, отображая только границы видимых поверхностей. Наконец, для отображения точек пересечения со строками развертки на границах видимых поверхностей можно использовать методы строк развертки.
Функцию затухания с глубиной можно реализовать с различными вариациями. В некоторых графических библиотеках доступна общая атмосферная функция (раздел 10.3), которая позволяет объединять затухание с глубиной с атмосферными эффектами, например, для имитации дыма или тумана. Таким образом цвет объекта можно модифицировать функцией затухания с глубиной, а затем объединить с цветом атмосферы.
ФУНКЦИИ ИССЛЕДОВАНИЯ видимых ПОВЕРХНОСТЕЙ В OpenGL
Методы удаления невидимых граней и методы проверки видимости с использованием буфера глубины можно применить к сценам, воспользовавшись функциями, предлагаемыми в основной библиотеке OpenGL. Кроме того, функции OpenGL применяются для построения каркасного изображения сцены с удаленными невидимыми линиями и отображения сцен с затуханием с глубиной.