#android #opengl-es #glsl #opengl-es-2.0
#Android #opengl-es #glsl #opengl-es-2.0
Вопрос:
Я хочу записывать в буфер глубины OpenGL, только если текущий пиксель имеет альфа> 0,5, как это сделать?
Если пиксель имеет альфа < 0,5, я хочу отобразить цвет, но не записывать его глубину в буфер глубины. Команда discard
— это не то, что я ищу, поскольку она отбрасывает информацию о цвете и глубине; Я хочу отбросить только информацию о глубине.
Есть gl_FragDepth
переменная, которую можно установить, но в какое значение? И для случая alpha < 0.5, как оставить gl_FragDepth
без изменений?
Должен ли я использовать FBO для этого, или он также должен работать без? Проект, над которым я работаю, является проектом GLES 2.0 для Android
Комментарии:
1. Я не думаю, что вы можете сделать это за один проход, по крайней мере, не напрямую и не эффективно. Вы, конечно, можете установить gl_FragDepth в значение, которое приведет к сбою теста глубины (например, zfar), но это также приведет к изменению цвета фрагмента. При двух проходах с использованием разных альфа-тестов это должно сработать … но на ES вы, вероятно, не можете позволить себе еще один такой проход.
Ответ №1:
Я решил проблему для себя, используя
glDepthMask(false)
Эта команда отключает запись в буфер глубины, но по-прежнему выполняет тестирование глубины.
Я просто отрисовал свои прозрачные объекты после всех других объектов и получил именно тот результат, который искал.