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


22

У мене є спрайт, який я намагаюся масштабувати в XNA, але XNA застосовує якусь фільтрацію текстури, яка згладжує її і робить її некрасивою. Мені б хотілося, щоб це було просто подвоєння пікселів замість інтерполяції. Як я це досяг?

Відповіді:


28

Потрібно встановити стан вибірки. За замовчуванням для SpriteBatch є SamplerState.LinearClamp(тобто: лінійна інтерполяція - гладка / розмита).

Виберіть один з SpriteBatch.Beginдзвінків, який приймає SamplerStateта передає SamplerState.PointClamp(вибирає піксель у цій точній "точці").


13

На випадок, якщо хтось інший задається питанням, як це зробити за межами партії спрайту, ви зробите це безпосередньо перед тим, як зробити свої примітиви:

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

Це потрібно зробити на кожному кадрі, якщо у вашому каналі візуалізації є інші елементи, які могли б змінити це значення (наприклад, а SpriteBatch).


3
Так! І лише задля повноти, ви також можете, SamplerState.PointWrapякщо ви хочете, щоб відбулося обгортання текстури (поки вимикання фільтрування текстури). Або якщо вам потрібна власна спеціальна поведінка, ви можете створити новий SamplerStateоб’єкт, щоб відповідати будь-яким спеціальним потребам, і змінити Filterвластивість на TextureFilter.Point.
Девід Гувейя
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.