У меня есть спрайт, который я пытаюсь увеличить в 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.