Если вертеть 50 фпс, то искажения незаметны. См. лого в The Link. Там вообще целыми байтами шлёпается.
Поворот спрайта на произвольный угол - это частный случай двумерной интерполяции. Исходный спрайт можно представить как функцию двух переменных (поверхность), заданную таблично. Требуется найти значения этой функции в точках, которые будут пикселами нового спрайта. Проблема в том, что новые точки в общем случае не совпадают со старыми, поэтому значения функции в них не заданы. Единственный случай, когда точки совпадают - это поворот спрайта на угол, кратный 90 градусам.
Так вот, значения функции в новых точках не заданы, поэтому их приходится оценивать исходя из имеющихся значений этой функции в старых точках + некоторых представлениях о виде функции.
Самый простой случай - интерполяция ближайшим соседом. В качестве оценки значения функции используется ее значение в ближайшей точке, где оно задано. Такой метод дает результаты, которые выглядят примерно похоже на результат поворота исходного спрайта, но качество оставляет желать лучшего.
Второй часто используемый метод - линейная интерполяция. Это по результатам то же самое, что описал SpecialistMK87, но проще в реализации. Значения функции между точками, где оно задано, вычисляется в виде линейной комбинации от координат. Этот метод дает более высокое качество и реализован в большинстве современных видеокарт аппаратно.
Третий часто используемый метод - кубическая интерполяция. Он считается подходящим для высококачественной обработки изображений, хотя и он дает некоторое ухудшение качества.
Вышеописанные методы - линейный и кубический - а также другие более сложные методы двумерной интерполяции дают дробные значения для новых пикселов, а в случае Spectrum эти значения нужно округлять до 0 либо 1, что также вносит искажения. Поэтому, даже при использовании самых современных и теоретически обоснованных методов интерполяции, значительное ухудшение качества изображения при повороте неизбежно. При размере спрайта 16х16 я не вижу никаких перспектив в автоматическом повороте. То есть повернуть-то можно, но потом все равно придется руками править, чтобы получить хороший результат. Помню, как мы для игры Monty черепа вращающиеся рисовали - гемор был еще тот.
Если не в реальном времени - то вращать спрайты лучше всего в каком-нибудь фотошопе. Там реализованы современные методы обработки изображений.
Как много слов
При повороте спрайта 16х16 на угол менее 90 градусов он превращается в кашу.
так коротко и понятно![]()
С уважением,
Jerri / Red Triangle.
Коротко и понятно только для нелюбопытных, которые не интересуются, почему спрайт превращается в кашу, и нельзя ли что-нибудь с этим сделать. Но если человек нелюбопытный и удовлетворяется подобного рода простыми ответами - то никогда ему не шагнуть за черту неизведанного и не раздвинуть границы возможного.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Попробовал вчера средствами BGE сделать поворот с предварительным масштабированием. Для объектов с большим количеством деталей получается плохо. Т.е. никаких линий толщиной в пиксель и отдельно стоящих пикселей. Тогда будет лучше.
В каком-то из журналов была статья о повороте спрайта на угол, с последующей обработкой повернутого. Там даже примеры были
Так появился Диззи :-)Попробовал вчера средствами BGE сделать поворот с предварительным масштабированием. Для объектов с большим количеством деталей получается плохо. Т.е. никаких линий толщиной в пиксель и отдельно стоящих пикселей. Тогда будет лучше.
Сферический ламер в вакууме
А кого же они поворачивали?Так появился Диззи :-)![]()
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)