Подтвердить что ты не робот

OpenGL: рендеринг двух прозрачных плоскостей, пересекающихся друг с другом: невозможно или нет?

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

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

alt text

4b9b3361

Ответ 1

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

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

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

ИЗМЕНИТЬ

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

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

Я забыл упомянуть Alpha to Coverage.

Ответ 2

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