Компьютерная графика

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Реализация Z-buffer

Сообщений 1 страница 4 из 4

1

Как в openGL реализован тест глубины? Хочу написать собственный Z-буфер. Я так понял, что нужно в пиксельный шейдер передавать массив(двумерный? текстуру?), в котором будут храниться z-компоненты каждой точки. В PS выводить и сооответственно записывать в Zbuffer только те пиксели-точки которые ближе к нам.

Если я правильно мыслю, то:
- Как передавать двумерные массивы в GLSL?
- Как записывать данные из пиксельного шейдера в массив(Zbuffer)?

0

2

Для чего свой тест глубины - в некоторых случаях можно использовать поддержку теневых карт для эмуляции второго z-буфера.
Передавать массивы - текстуры, image или Shader Storage Buffer Object. В последние два можно писать и читать.
Image - это как текстура, без мипов с возможностью записи из шейдера в произвольное место.
Соответственно шейдер получает их на входе, может читать и писать.
На стороне CPU тоже можно записать или прочесть данные оттуда.
Проще всего Shader Storage Buffer Object (SSBO).

0

3

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

Интересно как сами разработчики openGL реализовали алгоритм Zbuffer'a? Текстурами, image или SSBO? Для начала хочется понять как это сделать текстурами.

0

4

Сами разработчики используют аппаратные возможности GPU через драйвер.
Можно реализовать это в софте - чисто на процессоре. Тогда это просто двухмерный массив из целых чисед. При выводе выпорлняется сравнение.
Целое число - обычно глубина из вещественного числа из [0,1] перемасштабируется в диапазон целых чисел в зависимости от разрадности z-буфера.
На habrahabr.ru была среия статей по реализации всего графического конвейера в софте, к сожеланию ссылки нет.

0



создать форум