Есть ли конфликт между GL_DEPTH_TEST и альфа-смешением в openGL? - PullRequest
1 голос
/ 16 августа 2011

Я рисую некоторые "2D" картинки. Скажем, рис А на заднем плане рисует первым, рис Б на переднем плане рисует позже А. и есть некоторая прозрачная область в B. Поэтому, когда я включаю GL_DEPTH_TEST, B должен покрывать А, но эти прозрачные области.

фактический результат, который я получил здесь, странный, B действительно покрыл A, но прозрачная область показывает тот самый фон вместо A, каким он должен быть.

я использую glFrustum как GL_PROJECTION, glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA), glDepthFunc (GL_LEQUAL) Есть ли какие-то настройки, которые мне не хватает или что?

1 Ответ

3 голосов
/ 16 августа 2011

Не должно быть конфликтов, о которых вы говорите. Буфер глубины может содержать только одну глубину на пиксель, поэтому проблема может заключаться в прозрачности, потому что не совсем точно сказать, что каждый пиксель состоит из данных с одной глубины.

Чистый эффект состоит в том, что если вы рисуете что-то частично прозрачное, то пытаетесь нарисовать что-то позади него, буфер глубины говорит, что не нужно рисовать. Так что, хотя вы должны видеть вещь позади, вы не можете.

В вашем случае то, что вы видите, было бы ожидаемым поведением, если бы вы рисовали B (на переднем плане), а затем A (на заднем плане). Возможно ли, что какой-то аспект вашего кода дает вам неожиданный порядок рисования?

...