2008-09-17 10 views
6

Ich denke nicht, dass dies nur mit der Farbeinstellung in SpriteBatch möglich ist, also versuche ich einen einfachen Shader zu entwickeln, der jedes Pixel nimmt und weiß macht, während der Alpha-Wert des Pixels respektiert wird.Wie kann ich ein Sprite in XNA weiß färben?

Die Antwort, die Joel Martinez gab, sieht gut aus, aber wie integriere ich das, wenn ich das Sprite mit SpriteBatch zeichne?

Antwort

0

Ich habe meine eigenen Pixelshader, meist modifizierte Samples aus dem Netz, nicht geschrieben. Sie würden den Wert der R-, G- und B-Komponenten im Pixel erhöhen, solange sie darunter liegen 255 würde dies die Farbe des Sprites allmählich in Richtung Weiß verschieben. Hey, das reimt sich.

3

Ich denke, das ist das, was Sie suchen

sampler2D baseMap; 

struct PS_INPUT 
{ 
    float2 Texcoord : TEXCOORD0; 

}; 

float4 ps_main(PS_INPUT Input) : COLOR0 
{ 
    float4 color = tex2D(baseMap, Input.Texcoord); 
    return float4(1.0f, 1.0f, 1.0f, color.w); 
} 

Es ist sehr einfach, es dauert nur die abgetastete Farbe aus der Textur, und gibt dann ein alle weiße Farbe der Textur des Alpha-Wert verwendet wird.

1

Ich befestige die Dokumentationsseite von MS, und wenn Sie alle Schritte befolgen, sollten Sie es in kürzester Zeit in Betrieb nehmen.

http://msdn.microsoft.com/en-us/library/bb203872(MSDN.9).aspx

Um es zusammenzufassen - Sie müssen Datei erstellen und Wirkung (kombiniert des Codes, über dem für Ihre Zwecke in der Tat richtig ist), fügen Sie es zu einem Projekt, und dann in der Quelldatei laden es und verwende es während des Renderns wie im Link erklärt.

BTW: Ich erinnere mich nicht mehr an die SpriteBatch (da ich meine eigene zu schreiben, es ist zu restriktiv), aber wie ich mich erinnere, müssen Sie möglicherweise den Effekt in das Material an den Render senden. Sowieso - vielleicht werden Sie es hier finden:

http://creators.xna.com/en-us/utilities/spritebatchshader

Und eine erweiterte Code, wenn Sie es erhalten möchten:

http://creators.xna.com/en-us/sample/particle3d

Viel Spaß

1

Joel Martinez in der Tat richtig ist, und verwenden Sie es wie folgt mit einem Spritebatch, die Wirkung in tintWhiteEffect geladen haben:

spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate, SaveStateMode.None); 

tintWhiteEffect.Begin(); 
tintWhiteEffect.CurrentTechnique.Passes[0].Begin(); 

    // DRAW SPRITES HERE USING SPRITEBATCH 

tintWhiteEffect.CurrentTechnique.Passes[0].End(); 
tintWhiteEffect.End(); 

spriteBatch.End(); 

SpriteSortMode.Immediate der Trick hier ist, ermöglicht es Ihnen Spritebatch des auslagern Standard-Shader für Ihre eigenen. Wenn Sie sie verwenden, wird das Sprite-Zeichnen etwas langsamer, da Sprites nicht in einem einzigen Draw-Aufruf zusammengefasst werden, aber ich denke nicht, dass Sie den Unterschied bemerken werden.

Verwandte Themen