Wie deaktiviere ich die Texturfilterung für die Sprite-Skalierung in XNA 4.0?

22

Ich habe ein Sprite, das ich in XNA skalieren möchte, aber XNA wendet eine Art Texturfilter an, der es glättet und unschön aussehen lässt. Ich möchte, dass es nur eine Pixelverdopplung anstelle einer Interpolation ausführt. Wie würde ich das erreichen?

Daniel T.
quelle

Antworten:

28

Sie müssen den Sampler-Status einstellen. Die Standardeinstellung für SpriteBatch ist SamplerState.LinearClamp(dh lineare Interpolation - die glatte / verschwommene).

Wählen Sie einen der SpriteBatch.BeginAnrufe aus, die einen annehmen SamplerStateund übergeben SamplerState.PointClamp(wählt das Pixel an diesem genauen "Punkt" aus).

Andrew Russell
quelle
13

Nur für den Fall, dass sich jemand anderes fragt, wie dies außerhalb eines Sprite-Stapels geschehen soll, würden Sie dies tun, bevor Sie Ihre Grundelemente rendern:

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

Dies muss für jeden Frame durchgeführt werden, wenn sich andere Elemente in Ihrer Rendering-Pipeline befinden, die diesen Wert ändern würden (z. B. a SpriteBatch).

John Gietzen
quelle
3
Ja! Der Vollständigkeit halber gibt es auch einen SamplerState.PointWrapTexture-Wrapping-Vorgang, bei dem die Texture-Filterung weiterhin deaktiviert ist. Wenn Sie Ihr eigenes benutzerdefiniertes Verhalten benötigen, können Sie ein neues SamplerStateObjekt erstellen , das allen benutzerdefinierten Anforderungen entspricht, und die FilterEigenschaft in ändern TextureFilter.Point.
David Gouveia