Jak wyłączyć filtrowanie tekstur dla skalowania ikonek w XNA 4.0?

22

Mam duszka, którego próbuję skalować w XNA, ale XNA stosuje filtrowanie tekstur, które wygładza go i sprawia, że ​​wygląda brzydko. Chciałbym, żeby po prostu podwajało piksele zamiast interpolacji. Jak mam to osiągnąć?

Daniel T.
źródło

Odpowiedzi:

28

Musisz ustawić stan próbnika. Domyślna wartość dla SpriteBatch to SamplerState.LinearClamp(tj .: interpolacja liniowa - gładka / rozmyta ).

Wybierz jedno z SpriteBatch.Beginwywołań, które przyjmują SamplerStatei przekazują SamplerState.PointClamp(wybiera piksel w tym „punkcie” poprzedniej części).

Andrew Russell
źródło
13

Na wypadek, gdyby ktoś zastanawiał się, jak to zrobić poza partią duszka, zrób to tuż przed renderowaniem prymitywów:

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

Należy to zrobić w każdej ramce, jeśli w potoku renderowania znajdują się inne elementy, które zmieniłyby tę wartość (jak a SpriteBatch).

John Gietzen
źródło
3
Tak! I tylko ze względu na kompletność, istnieje również SamplerState.PointWrapopcja, jeśli chcesz, aby zawijanie tekstur miało miejsce (jednocześnie wyłączając filtrowanie tekstur). Lub jeśli potrzebujesz własnego niestandardowego zachowania, możesz utworzyć nowy SamplerStateobiekt, który będzie pasował do dowolnych niestandardowych potrzeb i zmienić Filterwłaściwość na TextureFilter.Point.
David Gouveia,