Categories: Sonstiges

Wie Sie OpenGL Texturen mit Quartz erzeugen und transformieren.

Mit Quartz können Sie 2D-Pfade in eine OpenGL-Textur zeichnen, die Größe des Quellbildes ändern, von einem Format in ein anderes konvertieren und sogar Text erzeugen. Wir werden einige dieser Techniken später behandeln. In diesem Beitrag werden wir ein paar einfache Wege zur Erzeugung von Texturen durchgehen.

Eine Möglichkeit, Texturen in OpenGL zu laden, besteht darin, eine Quartz-Oberfläche in einem beliebigen Format zu erstellen und das Quellbild darauf zu zeichnen, wir in Beispiel 5-22 angezeigt:

Copy to Clipboard

Verwenden Sie wie bisher die Methode imageWithContentsOfFile, um ein UIImage-Objekt zu erstellen und zuzuweisen, das ein CGImage-Objekt umhüllt.

  • Da es vier Komponenten pro Pixel (RGBA) gibt, ist die Anzahl der Bytes pro Pixel die Hälfte der Anzahl der Bits pro Komponente.
  • Weisen Sie der Bildoberfläche Speicherplatz zu und löschen Sie diese auf Nullen.
  • Erstellen Sie einen Quartz-Kontext mit dem gerade zugewiesenen Speicher.
  • Verwenden Sie Quartz, um das Quellbild auf die Zieloberfläche zu kopieren.
  • Erstellen Sie ein NSData-Objekt, das den zugewiesenen Speicher umhüllt.

Wenn Sie den Quartz-Ladecode in der Beispielanwendung ausprobieren möchten, führen Sie die folgenden Schritte aus:

  1. Fügen Sie Beispiel 5-22 zu ResourceManager.mm hinzu.
  2. Fügen Sie die folgende Methodendeklaration zum IResourceManager in Interfaces.hpp hinzu:
Copy to Clipboard

3. Ändern Sie in der Methode SetPngTexture in RenderingEngine. TextureES2.cpp dem LoadPngImage-Aufruf in LoadImage.
4. Stellen Sie in der Initialize-Methode ihrer Render-Engine sicher, dass ihr Minifaktionsfilter GL_LINEAR ist und Sie SetPngTexture aufrufen.

Ein Vorteil des Ladens von Bildern mit Quartz ist, dass Sie es einige Transformationen vornehmen lassen können, bevor Sie das Bild nach OpenGL hochladen. Angenommen, Sie möchten das Bild vertikal spiegeln. Sie können dies tun, indem Sie einfach die folgenden zwei Zeilen unmittelbar vor der Zeilem die CGContextDrawImage aufruft, hinzufügen:

Copy to Clipboard

Eine weitere nette Sache, die Sie mit Quartz machen können, ist, neue Bilder von Grund auf in Echtzeit zu erzeugen. Dies kann ihre Anwendung verkleinern und den Download beschleunigen. Dies ist besonders wichtig, wenn Sie versuchen, die maximale Größe, die Apple für den Download über das 3G-Netzwerk zulässt, auf weniger als 10 MB zu reduzieren. Natürlich können Sie dies nur für Texturen tun, die einfache vektorbasierte Bilder enthalten, im Gegensatz zu wirklich künstlerischen Inhalten.

Zum Beispiel könnten Sie Quartz verwenden, um eine 256×256 Textur zu erzeugen, die einen blau ausgefüllten Kreis enthält, wie in Beispiel 5-23. Der Code für die Erstellung der Oberfläche sollte vertraut aussehen, interessante Zeilen sind fett gedruckt.

Copy to Clipboard

Wenn Sie den Kreisgenerierungscode in der Beispielanwendung ausprobieren möchten, führen Sie die folgenden Schritte aus:

1. Fügen Sie Beispiel 5-23 zu ResourceManager.mm hinzu.
2. Fügen Sie die folgende Methodendeklaration zum IResourceManager in Interfaces.hpp hinzu:

Copy to Clipboard

3. Ändern Sie in der Methode SetPngTexture in RenderingEngine. TexturedES2.cpp den LoadImage-Aufruf auf GenerateCircle.
4. Stellen Sie in der Initialize-Methode ihrer Render-Engine sicher, dass ihr Minifaktionsfilter GL_LINEAR ist und Sie SetPngTexture aufrufen.

Quartz ist eine reichhaltige 2D-Grafik-API und könnte ein Buch für sich allein füllen. Wenn Sie nach weiteren Informationen suchen, empfehlen wir ihnen Apples Online-Dokumentation.

3DMaster