У меня есть спрайт, который я пытаюсь увеличить в XNA, но XNA применяет какую-то фильтрацию текстур, которая сглаживает его и делает его уродливым. Я бы хотел, чтобы это делало пиксельное удвоение вместо интерполяции. Как бы я это сделал?
У меня есть спрайт, который я пытаюсь увеличить в XNA, но XNA применяет какую-то фильтрацию текстур, которая сглаживает его и делает его уродливым. Я бы хотел, чтобы это делало пиксельное удвоение вместо интерполяции. Как бы я это сделал?
Ответы:
Вам необходимо установить состояние сэмплера. По умолчанию для SpriteBatch используется значение SamplerState.LinearClamp
(т. Е. Линейная интерполяция - плавная / размытая).
Выберите один из SpriteBatch.Begin
вызовов, который принимает SamplerState
и передает SamplerState.PointClamp
(выбирает пиксель в этой точной «точке»).
На тот случай, если кому-то еще будет интересно, как сделать это вне пакета спрайтов, вы должны сделать это непосредственно перед рендерингом своих примитивов:
this.GraphicsDevice.SamplerStates[0] = SamplerState.PointClamp;
Это должно быть сделано в каждом кадре, если в конвейере рендеринга есть другие элементы, которые могут изменить это значение (например, a SpriteBatch
).
SamplerState.PointWrap
если вы хотите, чтобы текстурное обертывание имело место (все еще отключая фильтрацию текстур). Или, если вам нужно ваше собственное пользовательское поведение, вы можете создать новыйSamplerState
объект в соответствии с любыми пользовательскими требованиями и изменитьFilter
свойство наTextureFilter.Point
.