Sie brauchen nicht Hunderte von Polygonen, um eine Kurve wie Sie zeichnen zu machen. Sie könnten mit 40 Quads auf der linken und 40 auf der rechten Seite kommen, und es würde ziemlich glatt aussehen. Erhöhen Sie das auf jeder Seite auf 100 und es sieht fast perfekt glatt aus, und kein modernes Gerät wird Probleme damit haben, das mit 60 fps auszuführen.
Sie können die Mesh-Klasse verwenden, um für jede Seite ein prozedurales Mesh zu generieren. Sie können das Netz an einer Stelle halten, an der Kamera festhalten und seine Scheitelpunkte und UVs so ändern, dass es so aussieht, als würden Sie einen unendlich langen Korridor schwenken. Dies wird ziemlich viel Mathe im Voraus erfordern, sollte aber glatt Segeln, sobald Sie das haben.
Grundsätzlich könnte Ihr Level-Design auf einer Art von Gleichung basieren, die Y-Offset als Eingabe verwendet. Oder es könnte eine lange Reihe von Offsets sein, und Sie könnten eine Spline-Gleichung oder eine lineare Gleichung verwenden, um zwischen ihnen zu interpolieren. Die Ausgabe würde die UV- und X-Koordinaten sein, die verwendet werden können, um jeden der Eckpunkte Ihrer zwei Netze zu aktualisieren.
Sie können den Vertex-Shader verwenden, um die UV-Koordinaten effizient zu aktualisieren, indem Sie einen konstanten Offset-Uniform-Parameter verwenden, den Sie für jeden Frame aktualisieren. Auf diese Weise müssen Sie die UV-Daten nicht für jeden Frame auf die GPU übertragen.
Verwenden Sie für die Vertexpositionen die zugrunde liegende float[]
Ihres Mesh und rufen Sie jeden Frame setVertices()
auf, um sie zu aktualisieren. Info here.
Eigentlich könnte es besser aussehen, wenn Sie die UV-und die X-Positionen allein lassen, und nur die Y-Positionen nach oben scrollen. Halten Sie ein paar Quads Padding oben und unten auf dem Bildschirm, und bewegen Sie einfach das oberste Quad nach unten, nachdem es vom Bildschirm scrollt.
Sie können eine 'PixMap' zur Laufzeit generieren, indem Sie sie selbst zeichnen, zum Beispiel basierend auf einer' CatmullRomSpline'. – noone
Haben Sie jemals eine Lösung gefunden, die für Sie funktioniert hat? –