Что я хочу делать в OpenGL с использованием C++ и GLSL: Когда текстура имеет альфа (texture.a! = 1.0;), то этот пиксель не записывается в буфер глубины , (для цветного буфера написано) Запись глубины происходит только тогда, когда пиксель texture.a == 1.0;OpenGL - не записывать глубину, если альфа
Отбрасывание в шейдере не является решением - тогда этот пиксель не записывается в цветной буфер.
Любые идеи?
@UPDATE: Пример: У меня есть некоторые изображения пользовательского интерфейса, созданные OpenGL. Некоторые из них имеют альфа в углах. В рендеринге сцены у меня есть «глубина preass», чтобы сохранить некоторые пиксели, не вычисляя свет на них. Я хочу также получить изображения UI для этого префасса - но только полностью непрозрачные пиксели (alpha = 1.0).
Можете ли вы еще раз объяснить свою мотивацию? Это похоже на то, что вы пытаетесь реализовать прозрачность, независимую от заказа. Если вы объясните технику, которую вы пытаетесь выполнить, мы можем дать вам лучшее решение. –
Первое сообщение обновлено – Skides
Это на самом деле не имеет большого смысла, вы пытаетесь сделать это в предварительном прохождении глубины, который по определению должен отключить запись в буфере цвета, независимо от того, отбрасываете ли вы фрагмент или нет, не должно влиять на то, его цвет записывается в цветовой буфер в глубину предварительного прохода. Я думаю, что вы действительно хотите использовать буфер трафарета во время рендеринга GUI, чтобы замаскировать непрозрачные биты экрана, а затем увеличить глубину перед прохождением для записи в буфер глубины в этих местах (записать глубину ближней плоскости для всего, что удовлетворяет условиям вашего трафарета). –