Ist es möglich, 2D- und 3D-Grafiken in einem einzigen OpenGL ES 2.0-Spiel zu mischen?
Ich habe viele 2D-Grafiken in meinem Spiel. Die 2D-Grafik wird durch zwei dreieckige Polygone (die ein Rechteck bilden) mit einer Textur darauf dargestellt. Ich verwende eine orthografische Matrix, um die gesamte Szene zu rendern.
Ich muss meinem Spiel jedoch einige 3D-Effekte hinzufügen. Daher möchte ich eine perspektivische Kamera verwenden, um die Netze zu rendern.
Ist es möglich, orthografische und perspektivische Kamera in einer Szene zu mischen ? Wenn ja, entstehen hierfür hohe Leistungskosten? Gibt es einen empfohlenen Ansatz, um dies effektiv zu tun? Ich werde 90% der 2D-Grafiken und nur 10% der 3D-Grafiken haben.
Zielplattform ist OpenGL ES 2.0 (iOS, Android). Ich benutze C ++ zum Entwickeln.
Vielen Dank.
Antworten:
Dies ist einfach zu bewerkstelligen.
Setzen Sie die Ansichtstransformation für das 2D-Material auf orthografisch und rendern Sie sie. Zeichnen Sie dann vor dem Löschen des Framebuffers die Effekte mit einer perspektivischen Projektion. Die Projektion wirkt sich nur auf die danach gezeichnete Geometrie aus. Stellen Sie daher vor dem Zeichnen den gewünschten Modus ein.
Dies ist die gleiche Art und Weise, wie wir mit HUDs in unseren FPS umgehen. :) :)
Die einzige Auswirkung auf die Leistung besteht darin, dass Sie eine einheitliche Variable (Ihre Projektmatrix) ändern, oder? Versuchen Sie also einfach, Dinge zu stapeln, um Statusänderungen zu minimieren - das gleiche alte Zeug.
quelle
Wenn Sie die orthografische und perspektivische Projektionsmatrix bei jedem Rendern in den Bildspeicher berechnen, wird die Leistung nur geringfügig beeinträchtigt. Ich schlage vor, sie in einer Variablen zwischenzuspeichern, sie einmal im Initialisierungscode zu berechnen und zu speichern und dann
glLoadMatrix
zum Laden der Matrix zu verwenden. Die Rendering-Methode würde im Pseudocode folgendermaßen aussehen:quelle