Алгоритм сглаживания? - PullRequest
5 голосов
/ 10 июня 2010

У меня есть текстуры, которые я создаю, и я хотел бы их сгладить. У меня есть доступ к цвету каждого пикселя, учитывая, как я могу сглаживать всю текстуру?

Спасибо

Ответы [ 4 ]

6 голосов
/ 23 октября 2016

Извините, но истинное сглаживание не состоит в получении среднего цвета от соседей, как указано выше. Это, несомненно, смягчит края, но это не сглаживание, а размытие. Истинное сглаживание просто невозможно правильно выполнить для растрового изображения, поскольку оно должно быть рассчитано во время рисования, чтобы определить, какие пиксели и / или края должны быть «размягчены», а какие - нет. Например: представьте, что вы рисуете горизонтальную линию, которая должна быть ровно толщиной в 1 пиксель (скажем, «высокий») и должна располагаться точно по целой координате строки экрана. Очевидно, что вы захотите, чтобы он был без ограничений, и правильный алгоритм сглаживания сделает это, нарисовав вашу линию в виде идеального ряда сплошных пикселей, окруженных идеальными пикселями с цветным фоном, без смешения тонов вообще. Но если вы возьмете эту же линию после ее прорисовки (то есть растровое изображение) и примените метод усреднения, вы получите размытие выше и ниже линии, в результате чего получается горизонтальная линия толщиной 3 пикселя, которая не является целью. Конечно, все может быть достигнуто с помощью правильного кодирования, но с помощью совершенно другого и гораздо более сложного подхода.

5 голосов
/ 10 июня 2010

Основной метод для сглаживания: для пикселя P, выборка пикселей вокруг него. Новый цвет P является средним по сравнению с исходным цветом для образцов.

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

Как уже говорили другие: сглаживание на самом деле не то, что делается для изображения, которое уже является растровым изображением пикселей. Это метод, который реализован в движке 2D / 3D рендеринга.

5 голосов
/ 10 июня 2010

«Сглаживание» может относиться к широкому кругу различных методов. Ни один из них, как правило, не будет чем-то, что вы заранее сделаете с текстурой.

Может быть, вы имеете в виду mip-mapping? http://en.wikipedia.org/wiki/Mipmap

1 голос
/ 10 июня 2010

Не очень важно спрашивать о сглаживании в терминах этого расплывчатого. Все зависит от характера текстур и от того, как они будут использоваться.

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

Обычно также хорошо избегать острых краев и объектов, которые являются небольшими по сравнению с масштабированием, которое может быть выполнено.

...