Смешивание прозрачных структур с глубиной

Я пытаюсь смешать структуры, которые имеют прозрачные области:

glEnable( GL_TEXTURE_2D );
glBindTexture( GL_TEXTURE_2D, ...);
glVertexPointer( 2, GL_FLOAT, 0, ... );
glEnable (GL_BLEND);
glBlendFunc (GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
glDrawArrays( GL_TRIANGLE_STRIP, 0, 4 );

Если я не добавляю glDisable (GL_DEPTH_TEST), прозрачные части главных структур перезаписывают все под ними (вместо того, чтобы смешаться). Там какой-либо путь состоит в том, чтобы сделать это, не отключая глубину? Я попробовал различные стыковочные функции, но ни один из помогших.

5
задан l.thee.a 22 May 2010 в 11:17
поделиться

1 ответ

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

Вот что вы должны сделать, чтобы смесь непрозрачной и смешанной геометрии выглядела правильно:

  1. Отделите смешанную геометрию от непрозрачной.
  2. Отсортируйте смешанную геометрию сзади вперед.
  3. Сначала нарисуйте всю непрозрачную геометрию, как обычно.
  4. Нарисуйте смешанную геометрию в отсортированном порядке. Вы хотите оставить тестирование глубины включенным, но временно отключить запись глубины с помощью glDepthMask (GL_FALSE) .

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

7
ответ дан 14 December 2019 в 08:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: