OpenGL глубина сортировки - PullRequest
9 голосов
/ 29 ноября 2010

Я делаю базовую прозрачность объекта, используя сортировку по глубине. В качестве глубины я использую расстояние (квадрат) от камеры до каждого центра треугольников модели, которое я вычисляю как {(x1 + x2 + x3) / 3, (y1 + y2 + y3) / 3, (z1 + z2 + z3) / 3}. Хотя результат почти в порядке, но есть некоторые ошибки.

голова обезьяны без сортировки no sorting

с сортировкой sorting

Что я могу сделать с этими ошибками?

Ответы [ 3 ]

6 голосов
/ 29 ноября 2010

Нет способа сортировать треугольники идеальным способом. Посмотрите на примеры в конце статьи Transparency Sorting на вики opengl.org.

@ кос: Взгляните на Заказ независимой прозрачности с двухслойным пилингом и Альфа-покрытие .

3 голосов
/ 07 февраля 2015

Если у вас нет частиц, выровненных по экрану, сортировка произвольных треугольников действительно довольно сложна.Чтобы получить идеальный результат, вы должны начать расщепление треугольников.

Как говорит @tibur, вы можете избежать некоторых простых приближений, но независимая от порядка прозрачность (OIT) также является достойным решением.Однако для этого требуются графические функции эпохи OpenGL 3.У меня есть реализация на github , которая показывает несколько способов сделать точный OIT довольно быстрым.

Стоит взглянуть на " адаптивную прозрачность"," многослойное альфа-смешение"и" гибридная прозрачность".Это быстрые приблизительные решения, но они дают очень хорошие результаты для обычных сцен.


Некоторые похожие вопросы ...

0 голосов
/ 15 сентября 2015

Математически говоря, если вы знаете что-то о теле, это может помочь сортировке.

Например, грани куба можно отсортировать по глубине только по одному барицентру (центру лица). Если центр квадратной грани A будет ближе, чем центр B, у B никогда не будет какой-либо части перед A (опять же, для куба.)

Фактически для выпуклого тела грани могут быть отсортированы только по ориентации.

...