Ich habe eine kachelbasierte 2D-Engine, bei der die Projektionsmatrix eine orthografische Ansicht der Welt ist, ohne dass eine Skalierung angewendet wird. Also: Eine Pixelstruktur wird in gleicher Größe auf dem Bildschirm gezeichnet.
Das alles funktioniert gut und sieht gut aus, aber wenn die Kamera eine Subpixel-Bewegung macht, erscheinen kleine Linien zwischen den Kacheln. Ich kann Ihnen im Voraus sagen, was das Problem nicht behebt:
GL_NEAREST
TexturinterpolationGL_CLAMP_TO_EDGE
Das Problem wird behoben, indem die Kamera am nächsten Pixel verankert wird, anstatt eine Subpixel-Übersetzung durchzuführen. Ich kann damit leben, aber die Kamerabewegung wird ruckartig. Irgendwelche Ideen, wie man dieses Problem behebt, ohne auf den Rundungstrick zurückzugreifen, den ich derzeit mache?
GL_NEAREST
oder nur mit aufgetreten istGL_LINEAR
.Antworten:
Um ein Ruckeln der Kamera zu vermeiden, sollten Sie die Gleitkommakoordinatenkamera beibehalten, aber die OpenGL- Projektion auf das nächste Pixel klemmen .
quelle
Sie können diesen Blog-Beitrag über die Verwendung
double
anstelle vonfloat
OpenGL-Matrizen sehen. Ich hatte ähnliche Probleme auf dem PC mit OpenGL, daher ist es nicht iPhone / OpenGL ES-spezifisch, obwohl der Blog-Beitrag OpenGL ES auf dem iPhone erwähnt.quelle
Es kann sein, dass Sie bei der Berechnung der Koordinaten der Ecken der einzelnen Kacheln an Genauigkeit verlieren. Sie denken beispielsweise, dass sich der untere rechte Scheitelpunkt von Kachel 0 genau an der gleichen Stelle befindet wie der untere linke Scheitelpunkt von Kachel 1, aber tatsächlich nicht. Eine Idee, dies zu beheben, besteht darin, zu Beginn ein temporäres Koordinatengitter zu berechnen und dann die entsprechende Position beim Erstellen der Kachelgeometrie zu kopieren. Ist das sinnvoll?
quelle