Нормализованный буфер глубины записывает в opengl

Я делаю карты теней для направленного света, и стандартная матрица смещения глубины не дает одинаковых результатов на другом оборудовании.

После некоторой отладки я почти уверен, что некоторые графические процессоры записывают в буфер глубины нормализованные значения [0, 1] и некоторые значения ортогональной проекции [-1, 1].

Как заставить все GPU записывать значения в одном интервале? Есть ли команда OpenGL?


person Community    schedule 26.06.2014    source источник
comment
К сожалению, я не смогу показать какой-либо код. Не лучший способ начать вопрос.   -  person Colonel Thirty Two    schedule 26.06.2014


Ответы (1)


После некоторой отладки я почти уверен, что некоторые графические процессоры записывают в буфер глубины нормализованные значения [0, 1] и некоторые значения ортогональной проекции [-1, 1].

Как вы это сделали? Это просто неправильно.

Как преобразуются значения z, четко определено в спецификации GL. Они будут преобразованы из нормализованных координат устройства (то, что вы назвали "значением ортогональной проекции"), которые находятся в [-1,1], в пространство окна, используя диапазон, заданный через glDepthRange (то есть [0,1], если вы не т изменить его). Если у вас есть целочисленный буфер глубины (что также является типичным случаем), значения также будут преобразованы в целые числа с использованием всего диапазона доступных битов (обычно 24).

person derhass    schedule 26.06.2014
comment
Извините за неправильное название вещей. Почему я должен применить преобразование от [-1,1]->[0,1] к элементу z shadowcoord на некоторых картах, а не на других картах? shadowcoord — переменная выборки карты теней - person ; 27.06.2014
comment
@Aloalo: его нет ни на одних картах, ни на других картах. Все соответствующие реализации GL обрабатывают это одинаково. Возможно, вы нашли какую-то ошибку драйвера, но я в этом сильно сомневаюсь. Я думаю, что ошибка где-то в вашем коде. - person derhass; 27.06.2014