Einordnung der Inhalte (OpenGL) – Teil 2
In dem Shader program werden die shader miteinander verlinkt, sodass der output des einen shaders in den input des anderen läuft. Dies geschieht mit der Funktion glCreateProgram. Die Shader werden an das Programm angehängt und schließlich mit der Funktion glLinkProgram miteinander verlinkt. Nun kann das Programm einfach verwendet werden: glUseProgram(shaderProgram).
Der vorletzte Abschnitt besteht nun aus dem Linking Vertex Attributes. Hier werden die definierten Attribute des Vertex shaders auf die angegebenen Koordinaten-Punkte, die Daten spezifiziert. Um OpenGL mitzuteilen wie es die Daten interpretieren soll wird die Funktion glVertexAttribPointe genutzt. Diese Funktion nimmt ganze sechs Parameter entgegen, auf die ich vorerst nicht detaillierter eingehen werde (bei Interesse gerne hier nachschlagen), da ich mir zum jetztigen Zeitpunkt nicht ganz klar über die Auswirkung der Funktion bin. Auf jeden Fall wird das “generelle Vertex Attribut” anschließend mit glEnableVertexAttribArray aktiviert.

Auf jeden Fall spricht die Funktion unsere Daten an (siehe Abb 1), da wir für jeden Vertex-Punkt einen eine zusammengesetzte Position aus X, Y und Z haben.
Nun kommen noch folgende Objekte: Vertex Array Object (VAO) ins Spiel, nicht zu verwechseln mit VBOs. Denn um es nun noch lustiger zu machen können die VAOs genau wie die VBOs auch “gebunden” werden. Auch hier fehlt mir aktuell noch der Durchblick: Warum jetzt VAOs? Aber sie sollen anscheinend zukünftige Attributzugriffe vereinfachen. Außerdem wird in Ihnen der gesetzte Zustand gespeichert. Ich denke damit ist der Zustand der glVertexAttribPointer gemeint? Gute Frage, ist schon spät.
Das VAO ruft die Aktivierung der Attribute auf, enthält die Attribut-Konfiguration und eine Verknüpfung? zu den VBOs… Ja, wie gesagt, hier ist noch einiges unklar.
Für das VAO gibt es eine eigene Funktion für die Bindung: glBindVertexArray. Nun folgt hier ein wichtiger Satz: “The moment we want to draw one of our objects, we take the corresponding VAO, bind it, then draw the object and unbind the VAO again.” Die VAOs werden mit anderen Worten also ständig aufgebaut und wieder entbunden und zeigt denke ich mal die Relevanz der VAOs.
Nun kann endlich das Dreieck mit glDrawArrays gezeichnet werden. Folgendes Result entsteht dabei:

Als nächstes kommen noch Element Buffer Objects auf die ich im nächsten Eintrag eingehen werde. Für heute reicht es jedoch erst einmal. Die Informationen ergeben zwar alle Sinn aber nach meiner bisherigen Zeit in der IT wundert es mich nach wie vor wie viel teilweise nötig ist um ein einfaches “Hello world!” oder im heutigen Fall, ein Dreieck, zu erzeugen.
No Comment