Categories: Sonstiges

Einsteigerguide: Einführung in OpenGL und GLKit.

In dem folgenden Beitrag möchten wir ihnen die grundlegenden Konzepte von OpenGL vorstellen. Die Beantwortung der folgenden Fragen wird im Fokus dieses Beitrags stehen:

  1. Warum/Wann sollten Sie OpenGL verwenden,
  2. wie sollten Sie eine iOS Anwendung konfigurieren, um die OpenGL-Technologie zusammen mit GLKit zu verwenden.

Was ist OpenGL?

OpenGL, die Abkürzung für Open Graphics Library, ist eine sprach- und plattformübegreifende API zur Darstellung von 2D- und 3D-Computergrafiken. Hier werden wir speziell auf die ES (embedded System) Version eingehen, die auf mobilen Geräten (iOS und Android) verwendet wird. Der Hauptkonkurrent von OpenGL ist D3D (oder Direct3D), eine Windows-Technologie, die Teil der bekannten DirectX-API ist.

Einfach ausgedrückt, OpenGL ist eine Möglichkeit, den Grafikprozessor zu programmieren und es ist das Herzstück von fast allem, was wir heutzutage auf einem Computer / Smartphone / Tablet sehen. Sogar UIKit setzt auf OpenGL. OpenGL ist die Technologie hinter dem Grafik-Rendering.

In Apples Technologie-Stack gibt es verschiedene Frameworks, um verschiedene Dinge zu tun. Sie sollten CoreGraphics und CoreImage verwenden, um Bilder und Filter zu bearbeiten, CoreAnimation, um Ansichten zu animieren, SceneKit, um 3D-Objekte zu verwalten. Warum und wann sollten Sie also OpenGL verwenden? Kurz gesagt, wenn Sie auf die leistungsstarken Funktionen der Grafikkarte (GPU) ihres Geräts zugreifen wollen. Übrigens ist OpenGL derzeit die einzige Möglichkeit, ein 3D-Objekt in einer nativen iOS-Applikation darzustellen.

Nebenbei bemerkt, wenn ihnen jemand gesagt hat, dass OpenGL das am besten geeignete und mächtigste Werkzeug ist, um Videospiele zu erstellen, ist das nur ein Teil der Wahrheit. Sicherlich unterstützt OpenGL alle modernen Spiele (außer denen, die auf MSFT D3D laufen), aber kaum eines von ihnen (außer bei großen Studios) wird von Grund auf neu geschrieben. Und wenn Sie an solchen Themen interessiert sind, dann sollten Sie vielleicht andere Frameworks (ob 2D oder 3D) ausprobieren, die eine höhere Abstraktionsebene haben.

OpenGL ES.

Also, konzentrieren wir uns auf OpenGL ES. Die meisten Dinge, die wir behandeln werden, gelten auch für OpenGL, einige davon sind spezifisch für die eingebettete Version. Von jetzt an, wenn wir von OpenGL sprechen, meinen wir die ES-Version. Lassen Sie uns kurz einige wichtige Punkte besprechen, die das Herzstück von OpenGL bilden:

  • State Machine: OpenGL ist eine State Machine, was bedeutet, dass, wenn Sie eine Option setzen oder einen Puffer binden, diese Option oder dieser Puffer verwendet wird, bis Sie sie „Deaktivieren“. Als Beispiel glEnable aktiviert das Depth Testing von OpenGL und als solche bleibt sie so lange erhalten, bis sie explizit deaktiviert wird.
  • Koordinatensystem: Das OpenGL Koordinatensystem unterscheidet sich von dem von UIKit dadurch, dass es seinen Ursprung in der Mitte des Bildschirms hat. Mit einer allzu simplen Erklärung würde ich sagen, dass bei der Abbildung eines 3D-Raums dessen x = 0, y = 0, z = 0 Koordinaten in der Mitte des Bildschirms ihres Geräts stehen. Ohne Anwendung von Matrixtransformationen auf die Ansicht gehen die Koordinaten der Ebene von (-1, -1) der unteren linken Ecke des Bildschirms zu (1, 1) der oberen rechten Ecke des Bildschirms.
  • Vertices: Vertices repräsentieren die Daten, die mit den 3D-Objekten verbunden sind, die OpenGL auf dem Bildschirm darstellen soll. Vertex-Daten müssen in den Grafikprozessor geladen werden, damit der Vertex-Shader sie verarbeiten kann. Vertices werden normalerweise durch ihre Position (in einem 3D-Raum), Farbe, Normals und eventuell zugehörigen Texturen definiert.
  • Arbeiten mit Primitiven: Schließlich müssen Sie OpenGL sagen, wie der Datenstrom, den Sie in die Shader eingegeben haben, zu interpretieren ist, indem Sie festlegen, wie die Primitive, d.h. Punkte, Linien und Dreiecke, gezeichnet werden sollen.

OpenGL ES v. 1 vs. 2

Ab iOS 3.0 unterstützt Apple OpenGL ES 2 und hat die Entwickler nachdrücklich ermutigt, auf die neueste Version der Grafikbibliothek umzusteigen. Der Hauptunterschied zwischen v.1 und v.2 ist die so genannte programmierbare Pipeline. Grundsätzlich bietet und erfordert OpenGL ES 2 die Definition eigener Shader (spezifische Programme, die auf der GPU und nicht auf der CPU ausgeführt werden.

Während Sie in v.1 alles andere als Rohdaten an die GPU übergeben können, müssen Sie in v.2 eigene Shader definieren. Das heißt: mehr Leistung, mehr Arbeit für den Entwickler. OpenGL ES v.2 erfordert in der Tat, dass Sie schreiben:

  • einen Vertex-Shader, der Berechnungen (Transformationen) einmalig für jeden durch die Pipeline geleiteten Vertes anwendet,
  • einen Fragmentshader, der Farb- oder Texturdaten auf das Fragment anwendet, d.h. nachdem das Primitiv gerastert wurde.

Da dies einer der Hauptgründe war, warum sich die Entwickler nicht auf v.2 zubewegten, führte Apple mit iOS 5 ein neues Framework ein, GLKit.

GLKit.

So viel zu Theorie. Wenn Sie sich beispielsweise in WebGL einarbeiten möchten, empfehlen wir ihnen das Durcharbeiten unserer WebGL-Tutorial-Serie. An dieser Stelle ist es ausreichend zu sagen, dass GLKit einige Möglichkeiten bietet, um sich um einige der härteren Bits und sich wiederholenden OpenGL-Dinge zu kümmern. Abgesehen von einigen nützlichen mathematischen Hilfsprogrammen zum Umgang mit Matrizen, Quaternionen, affinen und homogenen Transformationen und ähnliche andere verschreckende Elemente, hat GLKit GLKBaseEffect eingeführt, eine Klasse, die die ganze Komplexität von Shadern beseitigt. Darauf werden wir in einem zukünftigen Beitrag noch etwas genauer eingehen.

3DMaster