Удаление конкурирующих точек Для управления тестом глубины библиотеки трехмерной графики могут заполнить Z-буфер заданным начальным значением и позволяют разработчику задать функцию сравнения, которая определяет, какую из двух точек с одинаковыми экранными координатами считать невидимой. Помимо этого библиотеки выполняют блокировку изменения данных, хранящихся в Z-буфере.

Библиотека DirectX также позволяет отказаться от создания Z-буфера при инициализации библиотеки и получить указатель на ту область памяти, в которой хранится Z-буфер.

Тест глубины включается и выключается при помощи операторов Devi ce->SetRen-derState(D3DRS_ZENABLE, D3DZBJRUE) и Device->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE). Второй параметр этих функций может принимать значение D3DZBJJSEW. В этом случае после преобразования проецирования в буфер вместо координаты Vz заносится четвертый компонент Vw.

Запись данных в буфер блокируется при помощи вызова функции Devi ce->Set-RenderState(D3DRS_ZWRITEENABLE. FALSE). В этом случае выполняется сравнение координаты Z очередной точки с Z-буфером. Если рассматриваемая точка находится на переднем плане, то она рисуется, но содержимое Z-буфера не корректируется. Чтобы включить запись, надо передать значение TRUE.

Для задания функции сравнения методу SetRenderState( ) передается одна из нескольких констант. Самые важные константы перечислены в следующем списке: О D3DCMP_GREATER - дальняя точка видима; О D3DCMP_NEVER - всегда невидима новая точка; О D3DCMP_LESS - ближняя точка видима; О D3DCMP_EQUAL - точка видима, если ее Z-координата совпадает с содержимым буфера.

Следует отметить, что в DirectX можно использовать дополнительные сравнения «меньше или равно» и «больше или равно» Когда рисуются близко расположенные параллельные грани, то z-координаты близких точек сливаются, и внешний вид изображения начинает сильно зависеть от порядка вывода. Однозначности решения можно добиться при помощи указанных операторов и предНастройка кадрирования


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