XNA спрайт трансформация - PullRequest
0 голосов
/ 08 ноября 2010

Кто-нибудь знает, как применить преобразование к спрайту без возможностей метода SpriteBatch.Draw()?

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

Ответы [ 2 ]

0 голосов
/ 08 ноября 2010

Спасибо!Я нашел решение, но оно очень медленно = (

this.displayMatrix = 
                Matrix.CreateTranslation(-(new Vector3(Position, 0))) * 
                Matrix.CreateRotationZ(1) *
                Matrix.CreateScale(new Vector3(new Vector2(1f, 2f), 1)) *
                Matrix.CreateTranslation((new Vector3(Position, 0)));
0 голосов
/ 08 ноября 2010

Матрица, переданная в SpriteBatch.Begin, применяется последней. Использование этого - единственный способ выполнить операцию масштабирования после операции поворота через SpriteBatch (при условии, что ваш масштаб неравномерен).

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

Другой вариант - написать свой собственный спрайтер-дозатор, но это выглядит довольно радикально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...