SFML: Как решить проблему снижения качества спрайта при вращении спрайта в sfml - PullRequest
0 голосов
/ 15 мая 2019

Изображение по ссылке ниже состоит из 20+ изображений (каждая часть тела и тип брони в отдельных файлах). Этот персонаж анимирован в программном обеспечении под названием «Spriter». Код берет выходной файл спрайтера (.scml), а затем вычисляет позиции частей тела и частей брони и поворачивает каждый кадр.

Когда вращение отсутствует, все рисуется плавно, но когда есть вращающиеся части, спрайты рисуются немного искаженными, как показано на рисунке ниже:

Вот GIF

Можно ли решить эту проблему искажения?

1 Ответ

0 голосов
/ 15 мая 2019

Похоже, что эти артефакты возникают из-за отсутствия сглаживания, что отлично подходит для пиксельной графики, но не очень хорошо для векторной графики и вращающихся объектов.

Чтобы включить сглаживание, просто найдите sf::Texture (s) для каждой части тела и вызовите setSmooth(true) для каждой.

Официальная документация здесь

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

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

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

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

...