Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

OpenGL

Что такое glPolygonOffset ?

glPolygonOffset - это новая функция в OpenGL 1.1. Пока она, к сожалению, имеет статус расширения. Ее прототип имеет вид: void glPolygonOffset(GLfloat factor, GLfloat units);

Каждый треугольник, как обычно, разбивается на фрагменты. Исходное значение depth вычисляется для каждого фрагмента. Но перед визуализацией к depth прибавляется некоторое значение:

	new_depth = depth + factor*slope + DELTA*units, 

где slope - это разница между минимальным и максимальным значением depth для видимой части треугольника,

а DELTA - константа, специфичная для драйвера / библиотеки OpenGL в каждом отдельно взятом случае; по cути, это минимальное значение, которое надо прибавить к depth, чтобы гарантированно была разница при Z-тесте между depth и new_depth, даже если slope = 0

Пример нормальных параметров - glPolygonOffset(1.0, 2.0). Практически же лучше подбирать экспериментально, в зависимости от разрядности Z-буфера (для 32-битного должны сгодиться практически любые значения)

Да, и еще одно замечание: включение/выключение функции идет с помощью glEnable / glDisable(GL_POLYGON_OFFSET). Смещение полигонов (polygon offset) применяется ДО того, как выполняется Z-тест и происходит запись нового значения в Z-буфер. Но это НЕ влияет на режим обратной связи (feedback), поскольку не связано с блоком геометрии. Пример на картинке взят из SGI OpenGL 1.1 SDK.

В центре - без polygon offset, справа - с включенным polygon offset. Как видно из рисунка, даже если координаты совпадают, нужный объект все равно ляжет поверх других.

Возможные применения glPolygonOffset: проективные тени (projective shadows), следы колес автомобиля на дороге, дырки от пуль на стене.

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог