Второе условие анализируется проще, поскольку знак косинуса легко определяется по скалярному произведению и условие можно сформулировать следующим образом:

n-v>0.

Можно еще упростить этот анализ, если учесть, что обычно он выполняется после преобразования в нормализованную систему координат устройства отображения. В этой системе координат все виды являются ортогональными, и, следовательно, направление на наблюдателя задается координатной осью z. Таким образом, в однородных координатах вектор V имеет вид

"0" О 1

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

Если уравнение плоскости, в которой лежит многоугольник, имеет вид ах + by + ci + d = О, то для определения, является ли грань лицевой или нелицевой, нам потребуется только проверить знак коэффициента с. Такую проверку можно выполнить как программно, так и аппаратно. При использовании отбраковки нелицевых граней нужно только тщательно проанализировать, допустимо ли это делать с учетом специфики конкретного приложения. В графической системе OpenGL включение режима отбраковки нелицевых граней выполняется функцией glCullFace( ).

7.7.2. Алгоритм z-буфера Одним из самых распространенных алгоритмов удаления невидимых поверхностей является алгоритм г-буфера. Алгоритм довольно просто реализуется как программно, так и аппа-ратно, прекрасно сочетается с конвейерной архитектурой графической системы и может выполняться со скоростью, соответствующей скорости обработки вершин остальными модулями конвейера. Хотя алгоритм отталкивается от пространства изображения, он включает цикл просмотра многоугольников, а не пикселей и может быть реализован в процессе растрового преобразования (этот процесс будет подробно рассмотрен в разделе 7.10).

Предположим, что выполняется растровое преобразование одного из двух многоугольников, показанных на рис. 7.30. Используя принятую в графической системе модель закрашивания, можно вычислить цвет точек пересечения с каждым из многоугольников луча, исходящего из центра проецирования и проходящего через заданный пиксель картинной плоскости. Кроме того, одновременно нужно определить, является ли данная точка пересечения видимой наблюдателю, - из двух анализируемых видимой будет только точка, ближайшая к наблюдателю. Следовательно, если преобразуется многоугольник В, его образ должен появиться на экране только в случае, если расстояние г2 меньше расстояния г, до многоугольника А. И наоборот, если преобразуется многоугольник А, то его цвет не должен никак повлиять на формируемый цвет пикселя и изображение этого многоугольника в этой области экрана не должно появиться. Но есть небольшая загвоздка в реализации этой простой идеи - обработка многоугольников выполняется последовательно, а потому, преобразуя в растр один многоугольник, мы не располагаем информацией о том, как по отношению к нему расположены другие. Решается эта проблема с помощью промежуточного буфера, в который записывается информация о глубине размещения каждого многоугольника.


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