OpenGL записывает в буфер глубины по одному пикселю за раз и отображает треугольники, которые производят пиксели, в том порядке, в котором они представлены в OpenGL. OpenGL не делает никакой глубокой сортировки треугольников, это зависит от структуры вызова, чтобы управлять этим способом, который наиболее эффективен для этого приложения. Это делается с целью обеспечения скорости и гибкости, поскольку наиболее эффективный способ визуализации множества треугольников - это хранить их в смежных буферах вершин и индексов, и если API придется беспокоиться о сортировке их всех в каждом кадре, это приведет к все намного медленнее.
Кроме того, материалы не связаны напрямую с треугольниками в API, поэтому у OpenGL действительно нет возможности узнать, какие из них прозрачные, а какие непрозрачные, до того момента, как они будут фактически отображены.
Хороший способ справиться с этим - сначала нарисовать все ваши непрозрачные треугольники, а затем, наконец, нарисовать все ваши прозрачные / альфа-смешанные треугольники. Как правило, вы хотите, чтобы тестирование глубины было включено, но запись глубины отключена, и сортируйте прозрачные треугольники от начала до конца для правильного смешивания. Обычно я обращаюсь с этим, чтобы иметь граф сцены с несколькими сегментами, и когда я добавляю треугольники в граф сцены, он автоматически разделяет их на соответствующие сегменты, которые будут отображаться в правильном порядке.