Bagaimana cara menonaktifkan pemfilteran tekstur untuk penskalaan sprite di XNA 4.0?

22

Saya memiliki sprite yang saya coba tingkatkan dalam XNA, tetapi XNA menerapkan semacam penyaringan tekstur yang menghaluskannya dan membuatnya tampak jelek. Saya ingin hanya melakukan penggandaan piksel daripada interpolasi. Bagaimana saya mencapai itu?

Daniel T.
sumber

Jawaban:

28

Anda perlu mengatur status sampler. Default untuk SpriteBatch adalah SamplerState.LinearClamp(yaitu: interpolasi linier - yang mulus / buram).

Pilih salah satu SpriteBatch.Beginpanggilan yang menerima a SamplerStatedan meneruskan SamplerState.PointClamp(memilih pixel pada "titik" precice itu).

Andrew Russell
sumber
13

Untuk berjaga-jaga jika ada orang lain yang bertanya-tanya bagaimana melakukan ini di luar kumpulan sprite, Anda akan melakukan ini sebelum merender primitif Anda:

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

Ini harus dilakukan pada setiap frame, jika ada item lain dalam pipa rendering Anda yang akan mengubah nilai ini (seperti a SpriteBatch).

John Gietzen
sumber
3
Ya! Dan hanya demi kelengkapan, ada juga SamplerState.PointWrapjika Anda ingin pembungkus tekstur terjadi (sementara masih menonaktifkan penyaringan tekstur). Atau jika Anda membutuhkan perilaku kustom Anda sendiri, Anda dapat membuat SamplerStateobjek baru agar sesuai dengan kebutuhan kustom apa pun, dan mengubah Filterproperti menjadi TextureFilter.Point.
David Gouveia