Я знаю, что на этот вопрос может показаться немного легко ответить, но это сводит меня с ума. Существует слишком много возможных ситуаций, с которыми должен справиться хороший механизм альфа-смешивания, и для каждого Алгоритма, который я могу придумать, чего-то не хватает.
Вот методы, о которых я пока говорю:
Прежде всего, я думаю о сортировке объектов по глубине, но это просто неудача, потому что объекты не являются простыми формами, они могут иметь кривые и могут зацикливаться внутри друг друга. Поэтому я не всегда могу сказать, какой из них ближе к камере.
Затем я подумал о сортировке треугольников, но этот тоже может потерпеть неудачу, подумав, что я не уверен, как это реализовать. Существует редкий случай, который может снова вызвать проблему, при которой два треугольника проходят друг через друга. Опять же никто не может сказать, кто из них ближе.
Следующим шагом было использование буфера глубины, по крайней мере, главная причина, по которой у нас есть буфер глубины, из-за проблем с сортировкой, о которых я упоминал, но теперь у нас возникает другая проблема. Так как объекты могут быть прозрачными, в один пиксель там может быть больше , чем один объект видимым. Так для какого объекта я должен хранить глубину пикселя?
Затем я подумал, что, возможно, я смогу сохранить только наибольшую глубину переднего объекта, и с помощью этого определить, как я должен смешивать следующие вызовы отрисовки в этом пикселе. Но опять возникла проблема, подумайте о двух полупрозрачных плоскостях с твердой плоскостью в середине. Я собирался визуализировать сплошную плоскость в конце, можно увидеть самую дальнюю плоскость. Обратите внимание, что я собирался объединять каждые две плоскости, пока для этого пикселя не останется только один цвет. Очевидно, я тоже могу использовать методы сортировки по тем же причинам, которые я объяснил выше.
Наконец, единственное, что я могу себе представить, это возможность рендерить все объекты в разные цели рендеринга, а затем сортировать эти слои и отображать окончательный результат. Но на этот раз я не знаю, как я могу реализовать этот алгоритм.