Ошибка точности Z-буфера Direct3D 9, возникающая только в сборке релиза - PullRequest
0 голосов
/ 27 марта 2020

В настоящее время я испытываю странную проблему, которая выглядит как Z-Fighting с Direct3D 9. Я подозреваю, что моя проблема на самом деле связана с точностью буфера Z.

Я заметил, что в Debug нет абсолютно никаких артефактов глубины. сборки (я использую Visual Studio 2012). Ошибка возникает только в сборках выпуска.

Используемый в настоящее время формат буфера глубины 24-разрядный с добавлением 8 (D3DFMT_D24X8). Когда я использую только 16-бит, точные артефакты появляются в обеих сборках Debug и Release. Так что это значит? DirectX отклоняет 24-битные буферы глубины? И если это так, зачем вам это делать?

Помимо всего этого, я попытался установить 32-битную версию, но она просто вылетает и возвращает нулевой указатель для устройства D3D.

Заранее большое спасибо.

Вот скриншот моей проблемы:

rectangular stair-like edges

1 Ответ

0 голосов
/ 31 марта 2020

Хорошо, так что я в конце концов нашел обходной путь. Я разделил свою сцену на области глубины, и я рендерил их все по одному после очистки Z-буфера между каждым проходом.

В настоящее время у меня есть два прохода (от 0,1 до 5 метров и от 5 до 10 км). Кажется, сейчас это работает довольно хорошо.

...