У мене є спрайт, який я намагаюся масштабувати в XNA, але XNA застосовує якусь фільтрацію текстури, яка згладжує її і робить її некрасивою. Мені б хотілося, щоб це було просто подвоєння пікселів замість інтерполяції. Як я це досяг?
У мене є спрайт, який я намагаюся масштабувати в XNA, але XNA застосовує якусь фільтрацію текстури, яка згладжує її і робить її некрасивою. Мені б хотілося, щоб це було просто подвоєння пікселів замість інтерполяції. Як я це досяг?
Відповіді:
Потрібно встановити стан вибірки. За замовчуванням для SpriteBatch є SamplerState.LinearClamp
(тобто: лінійна інтерполяція - гладка / розмита).
Виберіть один з SpriteBatch.Begin
дзвінків, який приймає SamplerState
та передає SamplerState.PointClamp
(вибирає піксель у цій точній "точці").
На випадок, якщо хтось інший задається питанням, як це зробити за межами партії спрайту, ви зробите це безпосередньо перед тим, як зробити свої примітиви:
this.GraphicsDevice.SamplerStates[0] = SamplerState.PointClamp;
Це потрібно зробити на кожному кадрі, якщо у вашому каналі візуалізації є інші елементи, які могли б змінити це значення (наприклад, а SpriteBatch
).
SamplerState.PointWrap
якщо ви хочете, щоб відбулося обгортання текстури (поки вимикання фільтрування текстури). Або якщо вам потрібна власна спеціальна поведінка, ви можете створити новийSamplerState
об’єкт, щоб відповідати будь-яким спеціальним потребам, і змінитиFilter
властивість наTextureFilter.Point
.