Это очень распространенный метод рисования прозрачных объектов (объектов, у которых есть части с альфа! = 1).
Наиболее распространенный подход заключается в том, чтобы сначала построить дерево объектов для рисования, которое затем можно будет отсортировать по «глубине» после прохождения через матрицы проекционных * камер. По сути, вместо того, чтобы просто слепо бросать треугольники в графический процессор, вы отправляете свои объекты один за другим, обрабатывая их в мире, во временный буфер. Эти объекты обладают полным знанием каждого треугольника и каждого цвета вершины / вершинного шейдера / имени текстуры + id и т. Д. Затем вы можете сортировать свой буфер (наивно, объект за объектом или полноценную сортировку на основе похожих патчей между объектами).
Трюк glDepthMask, если я правильно помню, выглядит примерно так:
glDepthMask(true);
drawOpaqueObjects();
glDepthMask(false);
drawTransparentObjects();
Для достижения наилучших результатов прозрачные объекты сортируются задом наперед, но в большинстве (простых) приложений это не имеет значения.
edit: обратите внимание, что для 2-й техники, в то время как вы включаете и затем отключаете буфер глубины WRITING, вы все еще используете TESTING буфера глубины, поэтому прозрачные объекты за вашими обычными объектами (например, шлем, указывающий "на" экран) выиграют ' тянутся.