Come disabilitare il filtro delle trame per il ridimensionamento degli sprite in XNA 4.0?


22

Ho uno sprite che sto cercando di ridimensionare in XNA, ma XNA sta applicando una sorta di filtro di trama che lo leviga e lo rende brutto. Mi piacerebbe solo raddoppiare i pixel anziché interpolare. Come lo farei?

Risposte:


28

È necessario impostare lo stato del campionatore. L'impostazione predefinita per SpriteBatch è SamplerState.LinearClamp(ovvero: interpolazione lineare - quella liscia / sfocata).

Scegli una delle SpriteBatch.Beginchiamate che accetta a SamplerStatee passa SamplerState.PointClamp(seleziona il pixel in quel "punto" di precetto).


13

Nel caso in cui qualcun altro si stia chiedendo come farlo al di fuori di un batch di sprite, lo faresti appena prima di rendere le tue primitive:

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

Questo deve essere fatto su ogni frame, se nella pipeline di rendering sono presenti altri elementi che potrebbero modificare questo valore (come a SpriteBatch).


3
Sì! E solo per completezza, c'è anche un SamplerState.PointWrapcaso in cui desideri che avvenga il wrapping delle trame (pur disabilitando il filtro delle trame). Oppure, se hai bisogno del tuo comportamento personalizzato, puoi creare un nuovo SamplerStateoggetto per adattarlo a qualsiasi esigenza personalizzata e modificare la Filterproprietà in TextureFilter.Point.
David Gouveia,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.