Решение, к какому полигону относится фрагмент, является вычислительно дорогостоящим, поскольку для этого потребуется найти ближайший полигон (и иметь всю информацию о геометрии, доступную во время затенения пикселей!) Для каждого отдельного пикселя.
Легко, почти тривиально сортировать целые объекты, каждый из которых состоит из множества треугольников (многоугольник - не более одного или нескольких треугольников) по глубине. Это, однако, лишь приблизительное приближение: соседние объекты будут перекрываться и создавать артефакты, поэтому необходимо сделать что-то, чтобы сделать его идеальным для пикселей.
Это - то, где z-буфер входит. Если оказывается, что вычисленная глубина фрагмента больше, чем то, что уже сохранено в z-буфере, это означает, что фрагмент находится «позади чего-то», поэтому он отбрасывается. В противном случае фрагмент записывается в цветной буфер, а значение глубины записывается в z-буфер. Конечно, это означает, что, когда 20 треугольников находятся позади друг друга, один и тот же пиксель будет затенен 19 раз напрасно. Увы, невезение.
Современное графическое оборудование решает эту проблему, выполняя z-тест до фактического затенения пикселя в соответствии с интерполированной глубиной вершин треугольника (эта оптимизация, очевидно, невозможна , если глубина пикселя рассчитывается).
Кроме того, они используют консервативные (иногда иерархические, иногда просто мозаичные) оптимизации, которые быстро отбрасывают целые группы фрагментов. Для этого z-буфер содержит некоторую дополнительную (неизвестную вам) информацию, такую как, например, максимальная глубина, отображаемая в прямоугольной области 64x64. С помощью этой информации он может немедленно отбросить любые фрагменты в этой области экрана, которые больше этого, без фактического просмотра сохраненных глубин, и он может полностью отбросить любые фрагменты, принадлежащие треугольнику, у которого все вершины имеют большую глубину. Потому что, очевидно, нет никакой возможности, чтобы что-либо из этого могло быть видимым.
Это подробности реализации и очень зависит от платформы.
РЕДАКТИРОВАТЬ: Хотя это, вероятно, очевидно, я не уверен, что я достаточно ясно прояснил этот момент: при сортировке для использования z-culling, вы бы сделали прямо противоположное того, что вы делаете с художником. алгоритм. Вы хотите, чтобы самые близкие вещи были нарисованы первыми (грубо говоря, не обязательно должны быть на 100% точными), поэтому вместо того, чтобы определять конечный цвет пикселя в смысле «последний стоящий человек», вы получаете его в смысле «первым пришел, первым служил, и только один служил ".