Wie schreibe ich eine 2D OpenGL App für OpenGL ES?

8

Ich arbeite an einem OpenGL-2D-Spiel mit Sprite-Grafiken. Ich wurde kürzlich darauf hingewiesen, dass ich OpenGL-ES-Aufrufe verwenden sollte, da es sich um eine Untergruppe von OpenGL handelt, die es mir erlauben würde, sie einfacher auf mobile Plattformen zu portieren. Der Großteil des Codes besteht nur aus Aufrufen einer Funktion draw_image, die folgendermaßen definiert ist:

%Vor%

Was muss ich ändern, um OpenGL ES kompatibel zu machen? Der Grund, warum ich fixed-function anstelle von Shadern verwende, ist, dass ich auf einer Maschine entwickle, die GLSL nicht unterstützt.

    
Skyler 24.04.2012, 14:22
quelle

1 Antwort

13
___ qstnhdr ___ Wie schreibe ich eine 2D OpenGL App für OpenGL ES? ___ qstntxt ___

Ich arbeite an einem OpenGL-2D-Spiel mit Sprite-Grafiken. Ich wurde kürzlich darauf hingewiesen, dass ich OpenGL-ES-Aufrufe verwenden sollte, da es sich um eine Untergruppe von OpenGL handelt, die es mir erlauben würde, sie einfacher auf mobile Plattformen zu portieren. Der Großteil des Codes besteht nur aus Aufrufen einer Funktion draw_image, die folgendermaßen definiert ist:

%Vor%

Was muss ich ändern, um OpenGL ES kompatibel zu machen? Der Grund, warum ich fixed-function anstelle von Shadern verwende, ist, dass ich auf einer Maschine entwickle, die GLSL nicht unterstützt.

    
___ antwort10300129 ___

In OpenGL ES 1.1 verwenden Sie die Funktionen glVertexPointer() , glColorPointer() , glTexCoordPointer() und glDrawArrays() , um ein Quad zu zeichnen. Im Gegensatz zu Ihrer OpenGL-Implementierung müssen Sie die Strukturen (Vektoren, Farben, Texturkoordinaten) beschreiben, aus denen Ihr Quad besteht, anstatt nur die integrierten Methoden glTexCoord2f , glVertex2f und glColor3f zu verwenden.

Hier ist ein Beispielcode, der tun sollte, was Sie wollen. (Ich habe die Argumentnamen verwendet, die Sie in Ihrer Funktionsdefinition verwendet haben. Daher sollte es einfach sein, den Code aus dem Beispiel zu portieren.)

Zuerst müssen Sie eine Struktur für einen Eckpunkt Ihres Quads definieren. Dies wird die Quad-Vertex-Positionen, Farben und Texturkoordinaten enthalten.

%Vor%

Dann sollten Sie eine Struktur definieren, die den ganzen Vierer bestehend aus vier Ecken beschreibt:

%Vor%

Instanziieren Sie jetzt Ihr Quad und weisen Sie Quadscheitelinformationen (Positionen, Farben, Texturkoordinaten) zu:

%Vor%

Nun erzähle OpenGL wie man den Quad zeichnet. Die Aufrufe von gl...Pointer stellen OpenGL mit den richtigen Offsets und Größen für die Werte Ihrer Vertexstruktur bereit, sodass diese Informationen später zum Zeichnen des Quads verwendet werden können.

%Vor%

Schließlich weisen Sie die Textur zu und zeichnen Sie das Quad. glDrawArrays weist OpenGL an, die zuvor definierten Offsets zusammen mit den Werten in Ihrem Quad -Objekt zu verwenden, um die durch 4 Vertices definierte Form zu zeichnen.

%Vor%

Bitte beachten Sie auch, dass es vollkommen in Ordnung ist, OpenGL ES 1 zu verwenden, wenn Sie keine Shader benötigen. Der Hauptunterschied zwischen ES1 und ES2 besteht darin, dass es in ES2 keine feste Pipeline gibt. Daher müssten Sie einen Matrix-Stack und Shader für das grundlegende Rendering implementieren. Wenn Sie mit der Funktionalität der festen Pipeline einverstanden sind, verwenden Sie einfach OpenGL ES 1.

    
___ tag123c ___ C ist eine universelle Computerprogrammiersprache, die für Betriebssysteme, Bibliotheken, Spiele und andere Hochleistungsanwendungen verwendet wird. Dieses Tag sollte bei allgemeinen Fragen zur C-Sprache verwendet werden, wie in der Norm ISO 9899: 2011 definiert. Fügen Sie ggf. ein versionsspezifisches Tag wie c99 oder c90 für Fragen zu älteren Sprachstandards hinzu. C unterscheidet sich von C ++ und es sollte nicht mit dem C ++ - Tag kombiniert werden, wenn ein rationaler Grund fehlt. ___ tag123opengles ___ Teilmenge der OpenGL 3D-Grafik-API, die für eingebettete Geräte wie Mobiltelefone entwickelt wurde. ___ tag123c ___ C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entworfen und behält eine ähnliche Syntax, ist aber jetzt eine komplett andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. ___ tag123opengl ___ OpenGL (Open Graphics Library) ist ein Grafikstandard und eine API, die plattformunabhängig und für Desktops, Workstations und mobile Geräte verfügbar ist. Es wurde entwickelt, um hardwarebeschleunigtes Rendering bereitzustellen und bietet daher eine erheblich verbesserte Leistung gegenüber dem herkömmlichen Software-Rendering. OpenGL wird für Anwendungen wie CAD-Software und Computerspiele verwendet. Der OpenGL-Standard sowie OpenGL ES werden von der Khronos-Gruppe gesteuert. ___ tag123sprite ___ Ein Sprite ist ein zweidimensionales Bild oder eine Animation, die in eine größere Szene integriert ist. ___
starbugs 24.04.2012, 14:33
quelle

Tags und Links