none
SPRITEBATCH RRS feed

  • Frage

  • Hi Leute,

    habe da ein komisches Phänomen, wenn ich mehrere Texturen zeichne und dann noch über alles eine Schrift (also Spritebatch.Draw(Texture2D) und Spritebatch.DrawString("") ).

    Dann stimmt die Reihenfolge was wann gezeichnet wird irgendwie nicht mehr.

     

    Benutze Spritebatch.Begin(SpriteSort.BackToFront, AlphaBlending)...

     

    Wir hatten solch ein Problem auch schon, als wir 3D Modelle zeichneten und dann noch ein Schriftzug, dass dann die 3D Modelle nicht mehr richtig gezeichnet wurden und komische Texturen hatten, also nicht so farbfreudig wie sonst.

     

    Nun ist bei mir der Fall, dass ich versuche einen Joystick zu malen. Dieser besteht aus der "Platte" und dem "Knubbel".

    Wenn jetzt der Knubbel unter der Platte ist, also vor der Platte gezeichnet wird, sieht das ganze natürlich sehr komisch aus.

     

    Ich denke die Problembeschreibung ist jetzt auch nicht wirklich die beste, habe gerade aber auch nicht den Source Code auf diesem PC...

    Hoffe man kann es dennoch ein wenig verstehen.

     

    EDIT:

    Was ich leider auch gar nicht verstehe, dass die Reihenfolge der zu zeichnenden Dinge irgendwie tauscht.

    D.h. der Knubbel ist zu anfang schön über der Platte, also alles sieht gut aus.

    Dann nach einer gewissen Zeit, ist der Knubbel unter der Platte.

    Leider scheint das ganze ÜBERHAUPT nicht deterministisch abzulaufen, weshalb es die Fehlersuche sehr schwer macht...

     

    Zur Sicherheit habe ich sogar den Knubbel vor der Platte und nochmals danach gezeichnet, jedoch tritt das Phänomen dennoch (irgendwann) auf :/


    Donnerstag, 16. Juni 2011 18:48

Antworten

Alle Antworten

  • Hallo WP7_Beginner,

    durch die Einstellung des AlphaBlending's kann es zu Farbveränderungen kommen, da einfach den Richtigen einstellen.

    Die Reihenfolge wird durch SpriteSort.??? und dem Draw - Aufruf bestimmt, der letzte Parameter der Draw Methode muß zwischen 0.0 und 1.0 liegen. Das klappt aber nur, wenn der gleiche Spritebatch verwendet wird.


    Regards,

    Dominik A. Ernst
    www.dominik-ernst.de, www.wp7-software.net
    Mittwoch, 22. Juni 2011 07:23
  • Hi, Danke für deine Antwort.

    Okay, das benutzen eines einzigen Spritebatchs ist kein Problem.

     

    Zu welchen Farbveränderungen kann es denn kommen?

    Das problem ist ja, dass ich der Knubbel sowohl vor, als auch nach der Platte gezeichnet wird und somit von der logik her gar nicht übermalt sein dürfte...

    Donnerstag, 23. Juni 2011 16:39
  • Hallo WP7_Beginner,

    farbveränderungen dahingehend, das die Pixel eines Textures nicht unbedingt ander Pixel esetzen sondern z.b. per OR in die vorhandenen Pixel kopiert werden.
    Beispiel 1: Ein blauer Pixel ist vorhanden und wird durch einen grünen Pixel ersetzt, ergibt einen grünen Pixel. Beispiel 2: Blauer Pixel vorhanden mit Grünen Pixel "verodern" ergibt im additiven Verfahren einen türkisen Pixel.

    http://de.wikipedia.org/wiki/Additive_Farbmischung

    http://de.wikipedia.org/wiki/Subtraktive_Farbmischung

    http://de.wikipedia.org/wiki/Alpha_Blending

    Wenn du SpriteSort verwendest ist es egal in welcher Reihenfolge du deine Texture zeichnest, auschlaggebend ist der Parameter "layerDepth".

     


    Regards,

    Dominik A. Ernst
    www.dominik-ernst.de, www.wp7-software.net
    Freitag, 24. Juni 2011 12:30