Как смешать образцы из мультисэмплинга

пожалуйста, прости любую неправильную терминологию, я сделаю все возможное, чтобы объяснить.

Я хотел бы знать, как технология рендеринга — gpu / cpu и т. Д. Смешивает / объединяет сэмплы, сгенерированные из рендеринга мультисэмплов? (Предположительно через несколько проходов.)
Чтобы было ясно — я не спрашиваю примеры DirectX / OpenGL, я спрашиваю, как это на самом деле работает.

Предыстория: я написал 2-мерную функцию рисования полигонов — в C / C ++ — которая основана на общей модели или делении каждой горизонтальной линии сканирования на несколько «образцов» (в моем случае 4), а затем использую это для оценки покрытия. Я также фиксирую эти точки в 4 вертикальных положениях, давая мне 4×4 сетки «выборок» на пиксель.

В настоящее время я генерирую маску битовой маски на пиксель, для которых покрыты «образцы», а также «альфа» того, как покрывается этот пиксель, от 0 до 256. Это прекрасно работает с одним полигоном, и все ребра хорошо сглаживаются. Проблема возникает при рисовании чего-то похожего на круговую диаграмму, первая часть рисуется отлично, но вторая часть, которая разделяет края, будет рисовать поверх этих краевых пикселей.

Например: Мультисэмплированная сетка на этом рисунке мой рендерер нарисует оранжевую часть, и нижний средний пиксель будет на 50% покрыт этим оранжевым многоугольником, поэтому будет 50% оранжевого и 50% цвет фона (скажем, черный). Затем будет нарисован зеленый многоугольник, который также покроет нижний средний пиксель на 50%, поэтому он будет смешивать 50% зеленого с существующим 50% оранжевым и 50% черным, что дает нам 50% зеленого и 25% оранжевого и 25% черного. но реально черный фоновый цвет никогда не должен входить в него, поскольку пиксель полностью покрыт, только не одним полигоном.

Эта страница описывает процесс и говорит «В подобных ситуациях OpenGL будет использовать процент покрытия для смешивания выборок из многоугольника переднего плана с цветами, уже находящимися в кадровом буфере. Например, для пикселя в нижнем центре изображения выше, OpenGL выполнит две выборки в зеленом многоугольнике , усредните эти образцы вместе, а затем смешайте полученный цвет на 50% с цветом, уже имеющимся в кадровом буфере для этого пикселя. « но не описывает, как на самом деле работает этот процесс: https://www2.lawrence.edu/fast/GREGGJ/CMSC420/chapter16/Chapter_16.html

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

Я не могу переключиться на размер буфера рендеринга 4xwidth и 4xheight, так как он используется не только для рисования полигонов. Я рад принять, что все «объединенные» многоугольники будут известны во время выполнения функции — например, пользователь должен передавать все многоугольники круговой диаграммы, а не по одному за раз, что кажется справедливым требованием.

Любое руководство будет оценено.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]