что такое исходный прямоугольник в spritebatch.draw в xna - PullRequest
3 голосов
/ 04 марта 2011

Для чего нужен параметр исходного прямоугольника в методе SpriteBatch.Draw ()?

MSDN говорит: A rectangle that specifies (in texels) the source texels from a texture. Use null to draw the entire texture.

Что это значит?

Ответы [ 3 ]

15 голосов
/ 04 марта 2011

Идея sourceRectangle состоит в том, чтобы позволить вам реализовать как оптимизацию производительности, так и удобство художника, объединяя несколько спрайтов в одну текстуру . Это называется «Атлас текстуры» или «Лист спрайта».

http://andrewrussell.net/content/2010/12/Sprite-Sheet-Example.png

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

Это также позволяет вам реализовать липкие 2D-спецэффекты, такие как «стирание» спрайта в:

http://andrewrussell.net/content/2010/12/Reveal-Animation-Example.png

A texel - это более или менее то же самое, что и пиксель в текстуре («пиксель текстуры», если хотите). Поэтому, когда вы рисуете свой спрайт, вы указываете левый верхний угол вашего спрайта в пределах текстуры вместе с его шириной и высотой. (Так же, как если бы вы выбрали его в редакторе изображений.)

Если вы передадите null для исходного прямоугольника, XNA примет исходный прямоугольник, который покрывает всю текстуру.

origin, которое вы указываете для Draw, также измеряется в текселях от левого верхнего угла исходного прямоугольника.

0 голосов
/ 04 марта 2011

Исходный прямоугольник определяет область текстуры, которая будет отображаться. Таким образом, если у вас есть текстура 40x40, а ваш прямоугольник (0, 0, 20, 20), будет отображаться только верхний левый угол текстуры. Если вы укажете NULL для прямоугольника, вы нарисуете всю текстуру.

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

0 голосов
/ 04 марта 2011

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

т.е.на этом спрайте здесь

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