Я пытаюсь смешать структуры, которые имеют прозрачные области:
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), прозрачные части главных структур перезаписывают все под ними (вместо того, чтобы смешаться). Там какой-либо путь состоит в том, чтобы сделать это, не отключая глубину? Я попробовал различные стыковочные функции, но ни один из помогших.
Включение теста глубины фактически не сортирует вашу геометрию по глубине - в обычном случае GL_LESS
он просто предотвращает рисование примитивов, если они не ближе к зрителю, чем то, что было нарисовано ранее. Это позволяет рисовать непрозрачную геометрию в любом желаемом порядке и при этом получать желаемый результат, но для правильного рендеринга смешанной геометрии обычно требуется, чтобы все, что находится за смешанным объектом, уже было отрисовано.
Вот что вы должны сделать, чтобы смесь непрозрачной и смешанной геометрии выглядела правильно:
glDepthMask (GL_FALSE)
. В качестве альтернативы, если ваш контент всегда либо полностью непрозрачен, либо полностью прозрачен, вы можете просто включить альфа-тестирование и отключить наложение, но я думаю, это не то, что вы ищете.