Kann jemand eine Anleitung zum Erlernen des OpenGL 3.2 Kernprofils vorschlagen?OpenGL 3.2 Core Profile Guide
Das SDK ist schwer zu lesen, und die meisten der Anleitungen, die ich gesehen habe, haben nur die alte Methode gelehrt.
Kann jemand eine Anleitung zum Erlernen des OpenGL 3.2 Kernprofils vorschlagen?OpenGL 3.2 Core Profile Guide
Das SDK ist schwer zu lesen, und die meisten der Anleitungen, die ich gesehen habe, haben nur die alte Methode gelehrt.
Ich kenne keine guten Führer, aber ich kann Ihnen eine kurze Zusammenfassung
machen Ich gehe davon aus, dass Sie werden mit den Grundlagen von Shadern bereits vertraut sind, Vertex-Puffer, etc. Wenn Sie das nicht tun, ich schlage vor, Sie zum ersten Mal statt einen Leitfaden über Shadern lesen, weil alle OpenGL 3 auf der Verwendung von Shadern
bei Initialisierung basiert:
erstellen und Vertex-Puffer füllen glGenBuffers
verwenden, glBindBuffer(GL_ARRAY_BUFFER, bufferID)
und glBufferData(GL_ARRAY_BUFFER, size, data, GL_STATIC_DRAW)
Das Gleiche gilt für Indexpuffer, mit der Ausnahme, dass Sie GL_ELEMENT_ARRAY_BUFFER
statt GL_ARRAY_BUFFER
Texturen genau erstellen verwenden, wie Sie in früheren Versionen von OpenGL haben (glGenTextures
, glBindTexture
, glTexImage2D
)
erstellen Shadern mit glCreateShader
, legen Sie ihren GLSL-Quellcode mit glShaderSource
fest, und kompilieren Sie sie mit glCompileShader
; Sie können überprüfen, ob es mit glGetShaderiv(shader, GL_COMPILE_STATUS, &out)
gelungen und glGetShaderInfoLog
Erstellen von Programmen (zB. eine Gruppe von Shadern zusammen gebunden, in der Regel einen Vertex-Shader und ein Fragment-Shader) mit glCreateProgram
, dann binden den Shadern Sie wollen mit mit Fehlermeldungen abrufen glAttachShader
, dann link das Programm mit glLinkProgram
;
Binden Sie die Vertex- und Indexpuffer mit glBindBuffer
mit Argumenten GL_ARRAY_BUFFER
und GL_ELEMENT_ARRAY_BUFFER
bzw.
glGetProgram
und glGetProgramInfoLog
wie Shadern können Sie ErfolgWenn Sie zeichnen möchten überprüfen Verknüpfung
Bind das Programm mit glUseProgram
Nun müssen Sie für jede variierende Variable in Ihren Shadern glVertexAttribPointer
aufrufen, deren Syntax ähnlich wie die Legacy glVertexPointer
, glColorPointer
usw. ist.Funktionen, mit Ausnahme des ersten Parameters, der eine Kennung für das Variieren ist; Diese ID kann durch Aufrufen von glGetAttribLocation
in einem verknüpften Programm abgerufen werden.
Für jede einheitliche Variable in Ihren Shadern müssen Sie glUniform
anrufen; Der erste Parameter ist die Position (auch eine Art Bezeichner) der Uniform-Variablen, die Sie durch Aufruf von glGetUniformLocation
abrufen können (Warnung: Wenn Sie ein Array namens "a" haben, müssen Sie die Funktion mit "a [0] aufrufen „)
für jede Textur, die Sie binden möchten, müssen Sie glActiveTexture
mit GL_TEXTUREi
nennen (i für jede Textur anders zu sein), dann glBindTexture
und stellen Sie dann den Wert der Uniform i
Anruf glDrawElements
Thi Das sind die grundlegenden Dinge, die Sie tun müssen. Natürlich gibt es andere Sachen, wie Vertex-Array-Objekte, einheitliche Puffer usw., aber sie dienen nur zur Optimierung
Andere Domänen wie Culling, Blending, Viewports, etc. blieben weitgehend die gleichen wie in älteren Versionen von OpenGL
Ich schlage auch vor, Sie studieren this demo program (die Vertex-Array-Objekte verwendet). Die interessanteste Datei main.cpp
Hope this
Eines der besseren modernen OpenGL helfen können (Kern 3.2+) „kurze Zusammenfassungen“ ich seit langem gesehen habe. Wird wahrscheinlich noch mehr Sinn machen, wenn Sie von 1.x/2.x kommen und versuchen, durch neuere Tutorials auf dem neuesten Stand zu sein. Gut als Mindmap. – Aktau
Eine Sache, die mich stolperte war, dass Sie VAO und VBO zum Zeichnen verwenden müssen. Andernfalls erhalten Sie GL_INVALID_OPERATION beim Aufruf von glVertexAttribPointer. Das war zumindest unter Mac OS X der Fall. – YRH