Como desabilito a filtragem de textura para o dimensionamento de sprites no XNA 4.0?

22

Eu tenho um sprite que estou tentando ampliar no XNA, mas o XNA está aplicando algum tipo de filtragem de textura que suaviza e faz com que pareça feia. Eu gostaria que apenas fizesse duplicação de pixels em vez de interpolação. Como eu conseguiria isso?

Daniel T.
fonte

Respostas:

28

Você precisa definir o estado do amostrador. O padrão para SpriteBatch é SamplerState.LinearClamp(ou seja: interpolação linear - a suave / embaçada).

Escolha uma das SpriteBatch.Beginchamadas que recebe SamplerStatee passa SamplerState.PointClamp(seleciona o pixel no "ponto" do preço).

Andrew Russell
fonte
13

Caso alguém esteja se perguntando como fazer isso fora de um lote de sprites, você faria isso antes de renderizar suas primitivas:

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

Isso deve ser feito em todos os quadros, se houver outros itens em seu pipeline de renderização que alterem esse valor (como a SpriteBatch).

John Gietzen
fonte
3
Sim! E, apenas por uma questão de completude, também há uma questão de SamplerState.PointWrapse você deseja que a quebra de textura ocorra (enquanto ainda desativa a filtragem de textura). Ou, se você precisar de seu próprio comportamento personalizado, poderá criar um novo SamplerStateobjeto para atender a quaisquer necessidades personalizadas e alterar a Filterpropriedade para TextureFilter.Point.
David Gouveia