2011-01-15 7 views
0

Einfache Frage, über die ich immer nachgedacht habe. Als ich zum ersten Mal in opengl war, musste ich einen Weg finden, um "Kacheln" oder einen Haufen Dreiecke mit einem OpenGL-Draw-Call zu zeichnen, um die Performance enorm zu verbessern. Ich habe das getan, indem ich alle Scheitelpunkte in ein Array gesetzt und das Array gezeichnet habe. Ein Problem, das auftrat, war, wann immer ich die Kacheln scrollte, würde ich zufällig platzierte Pixel sehen, die ein- und ausschalteten, abhängig davon, wie viel ich die Karte gescrollt hatte. Etwa 5-8 auf einer 10x10 Karte. Nun bin ich wieder ins opengl gegangen und diesmal habe ich mit GL_LINE_LOOP anstelle von GL_TRiANGLES gezeichnet. Das ist mir damals nie in den Sinn gekommen, aber was ich bei der Verwendung von GL_LINE_LOOP sehe, sind alle Dreiecke, aber wenn es fertig ist (es geht von links unten nach rechts oben, also oben rechts), gibt es eine Linie zwischen wo ich endete und wo ich anfing. Würde die Ursache dieser zufälligen Pixel deswegen sein? Oder hat das nichts damit zu tun? Wird diese Zeile, die das Ende und den Anfang verbindet, wegen des GL_LINE_LOOP-Modus angezeigt oder hat das auch nichts mit der Art und Weise zu tun, wie ich die Map erstellt habe?Android OpenGL Vertex Array

Antwort

1

GL_LINE_LOOP ist ein völlig anderer Zeichnungsmodus - und nein, das ist nicht der Grund, warum Sie Pixel auf Kacheln fallen lassen. Der wahrscheinlichste Grund für das Löschen von Pixeln beim Zeichnen eines engen Gitternetzes besteht darin, dass Sie die Scheitelpunkte nicht konsistent berechnen. Das Prinzip besteht darin, dass, wenn ein Eckpunkt von zwei benachbarten Dreiecken (oder Quads, Linien, was auch immer) geteilt wird, die Gleitkommakoordinaten dieses Eckpunktes für jeden Zeichnungsaufruf 100% identisch sein müssen. Wenn du das tust, dann wirst du garantiert ein enges Netz ohne Lücken zwischen den Kacheln rendern. Dein Problem könnte etwas anderes gewesen sein ... vielleicht kämpft Z ... aber meine Vermutung ist das erste, was ich hier erwähne.

Verwandte Themen