OpenGL: визуализация двух прозрачных плоскостей, пересекающихся друг с другом: невозможно или нет? - PullRequest
14 голосов
/ 08 ноября 2010

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

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

alt text

Ответы [ 2 ]

11 голосов
/ 08 ноября 2010

Вам необходимо визуализировать свои плоскости, отключив тест глубины и используя формулу смешивания, не зависящую от порядка.

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

Существуют также продвинутые методы решения этой распространенной проблемы, такие как пилинг глубины.

РЕДАКТИРОВАТЬ

Вы можете поставитьбуфер глубины только для чтения, используя: glDepthMask (GL_FALSE) .

Вот хорошая статья, объясняющая , почему вы не можете достичь идеальной прозрачности: Сортировка прозрачности .Также обратите внимание на статью Заказ независимой прозрачности с двойной глубиной пилинга , в которой рассматриваются два метода (один простой и однопроходный), которые используются для получения точной (или приблизительной) прозрачности, независимой от порядка.

Я забыл упомянуть Альфа для покрытия .

1 голос
/ 12 июля 2012

Одно нетривиальное решение состоит в том, чтобы разбить плоскости на части, отсортировать их, а затем отрендерить обратно.Однако идеальной сортировки сложно достичь.Как и в статье, опубликованной в другом ответе: Сортировка прозрачности: сортировка по глубине

...