2016-09-09 2 views
1

Я работаю над стопом рендеринга и должен был сделать свою сцену на две текстуры с буферами глубины. Теперь, чтобы сгенерировать финальную сцену, я хочу объединить эти два рендера как текстуру плоскости с простым шейдером. Тем не менее, я изо всех сил пытаюсь понять, как использовать буферы обработки глубины, чтобы объединить обе текстуры, учитывающие расстояние от объектов.Как объединить текстуры с глубиной в современном OpenGL?

Поиск решения Найден this, который является устаревшим решением, но дал некоторые сведения. Кто-нибудь знает, как это сделать в современном OpenGL ES 2.0?

ответ

0

Предполагая, что это чувствительное к глубине наложение непрозрачной геометрии, и все, что у вас есть, это две плоскости 3D-материала, тогда все, что вы можете сделать, это загрузить образцы из текстур глубины, сравнить их, чтобы выбрать тот, который вы хотите, а затем загрузить значение цвета от «победителя» и записать это на выходной пиксель.

... но это звучит довольно дорого и не очень ценит наш 3D-графический процессор (вся точка GPU, поддерживающая тестирование глубины/трафарета, заключается в том, чтобы избежать такого рода беспорядков), поэтому не нужно объединять два прохода были бы лучше, если бы были какие-либо возможности для изменения вашего трубопровода ...

+0

Да, моя идея состояла в том, чтобы использовать информацию о глубине, которую я уже имею для тестирования глубины/трафарета, но я не мог понять, как это сделать , –

+1

При записи на поверхность главного окна вы не можете - OpenGL ES не позволяет вам изменять глубину программно из шейдеров. Для визуализации без экрана просто прикрепите текстуру глубины, которую вы хотите использовать для FBO в качестве вложения глубины, а затем просто не очистите ее. – solidpixel

+0

Итак, это полезно, однако я нашел решение своей проблемы, используя условное выражение в шейдере вместо того, чтобы отображать две разные сцены. –

Смежные вопросы