Глубина буфера OpenGL и выбраковка - PullRequest
3 голосов
/ 17 февраля 2010

В чем разница между использованием выборки задней грани и буфером глубины в OpenGL?

Ответы [ 2 ]

10 голосов
/ 17 февраля 2010

Отбор задней грани - это когда OpenGL определяет, какие грани направлены в сторону от зрителя и поэтому не видны. Подумай о кубе. Независимо от того, как вы вращаете куб, 3 лица всегда будут невидимы. Выясните, какие это грани, удалите их из списка полигонов, которые вы хотите нарисовать, и вы только вдвое сократили список.

Буферизация глубины довольно проста. Для каждого пикселя каждого нарисованного многоугольника сравните его значение z с буфером z. если оно меньше значения в буфере z, установите значение буфера z в качестве нового значения буфера z. Если нет, откажитесь от пикселя. Буферизация глубины дает очень хорошие результаты, но может быть довольно медленной, так как каждый пиксель требует поиска значения.

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

Отбор может сократить количество отображаемых полигонов, но это не алгоритм сортировки. Вот что такое Z-буферизация.

6 голосов
/ 17 февраля 2010

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

Буфер глубины (z-buffer) используется для подвешивания к ближайшему объекту (глубина относительно вида), который уже был визуализирован. Если вещь, которая появляется далее в списке отрисовки, находится позади чего-то, что я уже нарисовал (т. Е. Она имеет глубину, которая размещает ее дальше), я могу пропустить ее отрисовку, поскольку она заблокирована. Если новая вещь для рисования ближе, я рисую ее и обновляю буфер глубины новым, более близким значением.

...