Ich habe mich einmal hingesetzt und das Demo angepasst und zwei solide Flächen hinzugefügt. Und siehe da, bei diesen Flächen klappt es.
Habe auch beide Flächen auf VBO's umgestellt um zu testen ob ich hier einen Fehler hatte, es läuft weiterhin wie gewünscht. Meine Vermutung
ist nun dass es mit dem Alpha-Blending meiner Sprites zusammenhängt ...
Render ich die VBO's meiner SpriteBatcher in der Reihenfolge : Regal, Fass, Ritter und vergebe hierfür die Z-Indexe -4, -2, -3
dann erhalte ich folgendes Bild:
http://s7.directupload.net/file/d/3065/7ymmpcmd_jpg.htm
Änder ich die Renderreihenfolge der VBO's auf Regal, Ritter, Fass bei gleichem Index, dann erhalte ich einen korrekten
Output:
http://s1.directupload.net/file/d/3065/fstv2oow_jpg.htm
D.h. folgen die VBO's nicht den Z-Index Werten in der Renderaufruffolge, dann gibt es bei Alpha-Blending Probleme. Ich meine irgendwo vorhin
etwas übeflogen zu haben, dass der Z-Buffer Alpha Werte nicht ignoriert und dadurch die Fehler auftreten.
Nun bin ich aber in einem Dilemma. Ich habe mehrere SpriteBatcher (für jeden Textur Atlas einen), mit mehreren, nach Z-Index sortieren Sprites
auf mehrere VBO's verteilt, die ich unmöglich in der korrekten Reihenfolge rendern kann, da ich nicht zwischen den Objekten in den VBO's hin und
her springen kann :(
Eine Möglichkeit die ich als Lösung sehe, ist es einen großen SpriteBatcher zu bauen, anstelle von n-vielen. Das ist technisch weniger das
Problem, doch dann verliere ich doch den Vorteil des Batchers, da ich nicht wie jetzt eine Texturaktivierung für n-viele Sprites durchführen
kann da sie als Bulk gerendert werden, sondern bei jedem Sprite prüfen muss ob die aktuelle Textur mit dem Sprite identisch ist und dann
ggfs. die teure Aktivierung durchführe ...
Wie geht Ihr damit um? Isometrische Maps sind ja keine Seltenheit mehr und ich denke, 60-80% der Sprites haben irgend wie Alpha-Blending
Bereiche (für mein kleines Demo bis auf die Boden Tiles eigentlich jedes Sprite), insbesonders dann, wenn Animationen mit ins Spiel kommen,
wie z.B. bei Lootdrop's usw.
Irgendwie habe ich da grad einen Knoten im Kopf. Gibt es evtl. noch eine anderen Lösungsansatz?