Как отключить фильтрацию текстур для масштабирования спрайтов в XNA 4.0?

22

У меня есть спрайт, который я пытаюсь увеличить в XNA, но XNA применяет какую-то фильтрацию текстур, которая сглаживает его и делает его уродливым. Я бы хотел, чтобы это делало пиксельное удвоение вместо интерполяции. Как бы я это сделал?

Даниэль Т.
источник

Ответы:

28

Вам необходимо установить состояние сэмплера. По умолчанию для SpriteBatch используется значение SamplerState.LinearClamp(т. Е. Линейная интерполяция - плавная / размытая).

Выберите один из SpriteBatch.Beginвызовов, который принимает SamplerStateи передает SamplerState.PointClamp(выбирает пиксель в этой точной «точке»).

Эндрю Рассел
источник
13

На тот случай, если кому-то еще будет интересно, как сделать это вне пакета спрайтов, вы должны сделать это непосредственно перед рендерингом своих примитивов:

this.GraphicsDevice.SamplerStates[0] = SamplerState.PointClamp;

Это должно быть сделано в каждом кадре, если в конвейере рендеринга есть другие элементы, которые могут изменить это значение (например, a SpriteBatch).

Джон Гитцен
источник
3
Ага! И просто для полноты, есть также, SamplerState.PointWrapесли вы хотите, чтобы текстурное обертывание имело место (все еще отключая фильтрацию текстур). Или, если вам нужно ваше собственное пользовательское поведение, вы можете создать новый SamplerStateобъект в соответствии с любыми пользовательскими требованиями и изменить Filterсвойство на TextureFilter.Point.
Дэвид Гувейя