Ich arbeite derzeit an einem 3D-Autorennspiel für die iOS-Plattform. Ich musste ein Wiedergabesystem implementieren und diese Wiederholung dann in einer Videodatei aufzeichnen, um sie auf YouTube hochzuladen.
Ich habe nur Probleme mit dem Aufnahmeteil, der Rest ist erledigt. Was ich tue , ist die Verwendung von glReadPixels()
Befehl von OpenGL ES 1.1 den Framebuffer Inhalte zu erfassen und ein Video von dieser Rahmen während der Laufzeit zu schaffen (AVFoundation Framework).
Das Problem, mit dem ich konfrontiert bin, ist, dass ich glReadPixels()
jedes Update aufrufen muss, das sehr langsam ist. Es verringert die FPS von ungefähr 30 auf nur 2-3 ... Gibt es eine Alternative zum glReadPixels()
Befehl? Oder hat jemand ein Wiedergabesystem erstellt und auf Video aufgezeichnet?
Ich denke, der einfachste Weg ist, Benutzer- und KI-Aktionen und -Zustände während des Spiels aufzuzeichnen, nicht tatsächliche Frames. Nachdem das Spiel beendet ist, hat der Spieler, der das Rennen beendet oder zum Hauptmenü zurückkehrt, die Möglichkeit, eine Wiederholung anzusehen (oder eine zu speichern). Erst dann werden diese Aktionen verwendet, um die Frames durch Wiedergabe der Aktionen und wiederherzustellen Zustand durch die Spiel-Engine. Dies hat den zusätzlichen Vorteil, dass nicht (im Wesentlichen) jedes Vollbild während des Spiels mehrere zusätzliche Male gezeichnet werden muss.
quelle