Zeichnen mit GLKit

8

Ich versuche, ein Spiel mit opengl zu schreiben, aber ich habe viel Ärger mit den neuen glkit-Klassen und der Standardvorlage von iOS.

%Vor%

Damit wird der Puffer gelöscht (zu einer grauen Farbe), aber nichts aus dem Vertex-Array wird gerendert. Ich habe keine Ahnung, was ich von hier aus tun soll und aufgrund des Alters der Technologie gibt es nicht viele Informationen darüber, wie man glkit richtig einsetzt.

    
botptr 18.10.2011, 12:16
quelle

5 Antworten

12

Ich sehe nichts in Ihrem Setup-Code, der Ihre Shader lädt - ich nehme an, Sie tun dies irgendwo in Ihrem Code?

Außerdem erstellen Sie in Ihrem Setup-Code Ihren Framebuffer. Der GLKView erledigt das für Sie - Sie sagen tatsächlich, dass Sie in Ihrer viewDidLoad -Methode einen 24-Bit-Tiefenpuffer verwenden sollen:

%Vor%

Also, was dein glkView:drawInRect: Code oben macht, sagt: "Bindet meinen handgemachten Framebuffer und zieht ein paar Sachen hinein". Die GLKView stellt sich dann automatisch selbst dar, aber es wurde nichts in sie hineingezogen, Sie haben nur in Ihren handgemachten Puffer gezogen. Wenn Sie keine zusätzlichen Framebuffer-Objekte für Aufgaben wie das Rendern in die Textur benötigen, müssen Sie sich überhaupt nicht mit der Erstellung von Framebuffern beschäftigen - lassen Sie %%_in% dies automatisch tun.

Was Sie in Ihrer GLKView -Methode (oder an einer anderen Stelle im Setup) tun sollten, ist das Erstellen Ihrer Vertex-Array-Objekte, die sich an den OpenGL-Status erinnern, der für die Ausführung einer Zeichnung erforderlich ist. Dann sollten Sie in der setupGL Methode:

  1. Löschen Sie mit glkView:drawInRect: .
  2. Aktivieren Sie Ihr Programm.
  3. Binden Sie das Vertex-Array-Objekt (oder, wenn Sie kein VAO verwendet haben, enable die entsprechenden Vertex-Attribuzeiger).
  4. Zeichnen Sie Ihre Daten mit glClear() oder glDrawArrays() .

Der glDrawElements() setzt seinen Kontext automatisch als aktuell und bindet sein Framebuffer-Objekt vor jedem Zeichenzyklus.

Vielleicht probierst du GLKView eher wie eine normale GLKView . Es behandelt den größten Teil des OpenGL-Codes hinter den Kulissen und lässt Sie einfach sagen, was es zum Zeichnen benötigt. Es hat seinen UIView code genau wie ein reguläres drawRect: - mit einem normalen UIView in UIView sagst du ihm einfach, was es zeichnen soll, zum Beispiel mit Core Graphics Funktionen - du sagst es dann nicht zu präsentieren sich selbst.

Die drawRect: wird dann am besten als die Mechanik der Rendering-Schleife hinter den Kulissen behandelt. Sie müssen die Timer nicht implementieren oder müssen sich sogar darum kümmern, dass die Animation für Ihre Anwendung unterbrochen wird, wenn Sie den Hintergrund aufrufen. Sie müssen nur die GLKViewController oder update -Methode überschreiben (abhängig davon, ob Sie Unterklassen oder Delegieren durchführen), um den Status der openGL-Objekte oder der Ansichtsmatrix zu aktualisieren.

    
Stuart 19.10.2011 01:16
quelle
1

Ich habe einen Beitrag über die Einrichtung einer einfachen Projektvorlage mit GLKit geschrieben. Sie können es hier finden:

Steve Zissous Programmier-Blog

    
Gabriel G. Roy 27.03.2012 15:11
quelle
0

Ich habe das GLKit noch nicht benutzt, aber es scheint, dass Sie Ihren Framebuffer nicht darstellen, nachdem Sie hineingezogen haben. In einer Anwendung, die OpenGL ES 2 unter iOs aber ohne GLKit verwendet, rufe ich den folgenden Code am Ende der Rendering-Schleife auf.

%Vor%

}

Wie gesagt, ich habe GLKit noch nicht benutzt, also hoffe ich, dass das nützlich sein könnte.

    
JimN 18.10.2011 12:31
quelle
0

Ich glaube, du hast vergessen,

anzurufen %Vor%

kurz vor

%Vor%     
Germano 28.10.2011 10:45
quelle
0

Da GLKit die Rendering-Pipeline von OpenGL ES 1.1 nachahmt, müssen Sie die Routinen zum Definieren von Shader nicht hinzufügen. GLK tut dies tatsächlich für Sie, wenn Sie eine einfache Pipeline wie OpenGL ES1.1 verwenden möchten.

    
Sagar Ranglani 05.12.2011 18:24
quelle

Tags und Links