Jetzt ist es mir aber nun in kurzer Folge zweimal passiert, dass die Beispiele trotz Copy&Paste nicht richtig funktionieren. Das erste Mal war das simple Rendern eines Dreiecks.
Ich habe es dann mit Hilfe der Swiftless Seite hinbekommen und nebenbei heraus gefunden woran es lag: Angeblich soll OGL ab einer bestimmten Version (ich verwende 4.3) das Rendern einzelner VBO ohne VAO nicht mehr unterstützen. Nachdem ich dann noch ein VAO in den Quelltext einband lief es auf einmal. Mußte allerdings noch die Zeile
Code:
glBindBuffer(GL_ARRAY_BUFFER, 0);
auskommentieren, da er mir sonst eine NullReference Exception ausspuckt.
Heute habe ich dann das zweite Tut ausprobiert. Ein Dreick mit Farbübergängen:
und wieder funktionierte es nicht richtig wie auf der Seite beschrieben, das Dreieck blieb rot. Auch hier konnte die Swiftless Seite Abhilfe schaffen. McKesson schreibt alle Daten in ein VBO während swiftless mit 2 VBOs arbeitet. Jetzt bleiben ein paar Fragen offen:
Kann ich einfach nicht mehr Vertex Koordinaten und Farbwerte in ein VBO packen oder hat Mr McKesson einfach nen Fehler in seinem Code? Irgendwie vergeht einem doch stark die Lust mit diesem Buch zu arbeiten wenn jedes Tut in der präsentierten Form nicht funktioniert. Sollte ich auf anders Lehrmaterial ausweichen oder habe ich mich zu blöd angestellt?
Registriert: So Aug 08, 2010 08:37 Beiträge: 460
Programmiersprache: C / C++ / Lua
Du kannst die Farbdaten in einem VBO speichern, du kannst sie in getrennten VBO's speichern, wichtig ist nur, dass du OpenGL genau mitteilst wo sie denn gespeichert sind.
Also musst du:
1. das richtige VBO gebunden haben
mittels
Code:
glBindBuffer(GL_VERTEX_ARRAY, VBOID);
wenn du ein VBO mittels
Code:
glGenBuffers(GL_VERTEX_BUFFER,1);
erstellst, wird die eine ID übergeben. Diese musst du speichern und dann bei glBindBuffer angeben.
2. musst du OpenGL genau sagen wo im VBO die Daten liegen. Dazu gibt es die Parameter stride und offset.
ich hatte das glDrawArrays(GL_TRIANGLES, 0, 3); zwecks Trennung zwischen Initialisierung und Ausführung an ne andere Stelle Verschoben. Durch das glDisableVertexAttribArray, was ich natürlich nicht auskommentiert hatte, wurden dann die Kanäle dicht gemacht und die Farbe nicht mehr übermittelt. Also bleibt nur die Sache dass ab glaube OpenGL 4.0 VAOs eingesetzt werden müssen, was im Buch noch nicht so ist, da es mit 3.3 arbeitet.
Zu dem glcolorpointer: ist das in OpenGL 3+ noch drinnen? Das ist ja eine Funktion der 1.1er Version. Davon mal abgesehen sage ich OpenGL auch an keiner Stelle, in welcher location die Farbwerte im Shader abgegriffen werden können.
Registriert: So Sep 26, 2010 12:54 Beiträge: 238 Wohnort: wieder in Berlin
Programmiersprache: Englisch
das arcsynthesis tutorial arbeitet stets mit der neuesten version von opengl, also nix "nur opengl3"
Du könntest für deine Fragen dazu auch noch die Registry auf Khronos bzw OpenGL.org befragen. Ob welche Funktion noch in OpenGL Version XYZ enthalten ist/sind.
Mitglieder in diesem Forum: 0 Mitglieder und 111 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.