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
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.
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.
Welche Art von Mischung verwenden Sie?
Sollte verhindern, dass Fragmente mit Alpha von 0 in den Tiefenpuffer schreiben.
wenn Sie Shadern verwenden, versuchen Sie Blending zu deaktivieren und verwerfen die Pixel mit alpha 0
if(texColor.w == 0.0)
discard;
- 1. iPhone OpenGL: Tiling Texturen
- 2. Fehlerbehebung OpenGL ES 1.1 Texturen auf dem iPhone
- 3. Probleme beim Anzeigen von transparenten Texturen mit OpenGL ES auf Android
- 4. OpenGL ES: Anzahl der Scheitelpunkte für Texturen
- 5. OpenGL ES für Iphone
- 6. Android OpenGL ES 2.0 Texturen
- 7. Texturen in OpenGL ES 2.0 stempeln
- 8. Anwenden von Visual Effect auf Bilder mit OpenGL ES
- 9. Wie lade ich in OpenGL ES eine Textur mit transparenten Pixeln?
- 10. Fullscreen Textur iPhone OpenGL ES
- 11. OpenGL-Farbindex für iPhone OpenGL ES 1.1?
- 12. OpenGL ES 1.1 mehrere Texturen pro Mesh
- 13. Framebuffer, Texturen und glColor Verhalten in OpenGL/OpenGL ES
- 14. Wiederholen von Texturen in OpenGL
- 15. Wie mische ich zwei Texturen mit unterschiedlichen Koordinaten in OpenGL ES 2.0 auf dem iPhone?
- 16. OpenGL-Texturen mit mehreren Anzeigekontexten
- 17. Floating Point Texturen in OpenGL ES 2.0
- 18. OpenGL-Texturen Formateinschränkungen
- 19. OpenGL: Warum brauchen quadratische Texturen weniger Speicher?
- 20. Vermeiden von halben Pixeln mit OpenGL ES unter iOS
- 21. Erzielen eines Fade-Effekts auf einem Objekt - OpenGL ES - iPhone
- 22. machen PNG-Datei für iPhone OpenGL ES
- 23. iPhone OpenGL ES falsch Alpha Blending
- 24. OpenGL ES 1.1 oder 2.0 auf iPhone
- 25. iPhone OpenGL ES: glReadPixels funktioniert nicht
- 26. Texturen in OpenGL ES 2 funktioniert nicht richtig
- 27. iPhone OpenGL-ES: UISwipeGestureRecognizer
- 28. iPhone/iPad, OpenGL ES, CADisplayLink
- 29. SDL OpenGL-Texturen mit grünem Teint
- 30. iPhone OpenGL ES Texture2D Maskierung
Ist das nicht Alphablending geht nach Z-Test? – noop