2009-08-24 6 views
2

Momentan habe ich Blending- und Tiefentests für ein 2D-Spiel aktiviert. Wenn ich meine Texturen zeichne, entfernt die "obere" Textur einen Teil der unteren Texturen, wenn sie sich schneiden. Offensichtlich werden transparente Pixel der Texturen bei dem Tiefentest berücksichtigt und alle Farben der gezeichneten unteren Texturen gelöscht, wenn sie sich schneiden. Darüber hinaus werden Alpha-Mischungen falsch gerendert. Gibt es irgendwelche Funktionen, die OpenGL dazu bringen können, keine transparenten Pixel in die Tiefenprüfung einzubeziehen?iPhone OpenGL ES: Anwenden eines Tiefen-Tests auf Texturen mit transparenten Pixeln für 2D-Spiele

Antwort

2

Nein, das ist nicht möglich. Dies gilt für alle Hardware-Tiefentests.

GL (voll oder ES - und D3D) alle haben das gleiche Modell - sie malen in der Reihenfolge, die Sie Polygone angeben. Wenn Sie Polygon A vor Polygon B und logisch Polygon A vor Polygon B zeichnen, wird Polygon B nicht gezeichnet (mit Hilfe des Tiefentests).

Die Lösung besteht darin, Polygone in der Reihenfolge vom am weitesten entfernten zum aktuellen Ansichtsursprung zu zeichnen. Glücklicherweise sollte dies in einem 2D-Spiel einfach eine einfache Art sein (eine, die Sie wahrscheinlich nicht oft machen müssen).

In 3D-Spielen sind BSPs die grundlegende Lösung für dieses Problem.

3
glEnable(GL_ALPHA_TEST); 
glAlphaFunc(GL_EQUAL, 1.0f); 

Dadurch werden alle Pixel mit einem Alpha von etwas anderem als vollständig undurchsichtig gelöscht. Diese Pixel werden dann nicht zum Z-Puffer gerendert. Dies wirkt sich jedoch auf verschiedene Optimierungen der Z-Puffer-Pipeline aus, so dass es zu ernsthaften Verlangsamungen kommen kann. Benutze es nur wenn du wirklich hast.

0

Welche Art von Mischung verwenden Sie?

Sollte verhindern, dass Fragmente mit Alpha von 0 in den Tiefenpuffer schreiben.

+0

Ist das nicht Alphablending geht nach Z-Test? – noop

2

wenn Sie Shadern verwenden, versuchen Sie Blending zu deaktivieren und verwerfen die Pixel mit alpha 0

if(texColor.w == 0.0) 
    discard; 
Verwandte Themen