Einstieg in OpenGL, Anfängerprobleme
-
Hmm..
Ich hab mal den Code, wie du dein Fenster erstellst angepasst, und immerhin kommt keine Fehlermeldung mehr.
Allerdings sehe ich immer nur ein kleines weißes Dreieck mit den Koordinaten 0|0 10|0 10|10.
Egal was ich mache.
-
Wie meinst du das, egal was du machst.
Das kleine Dreieck wird angezeigt, weil ein VBO erstellt wird (zumindest in meinem Beispielcode) mit eben diesen Vertices und dann in der Render-Funktion gezeichnet wird.
-
Ich mein, egal wie die vertices sind, ich seh immer nur ein kleines weißes Dreieck unten links in der Ecke. Ich werde heute die Codes nochmal genauer abgleichen, vielleicht lässt sich bei mir ja noch was ändern, dass die VBO's dann auch richtig laufen.
-
Du musst in der RenderFunktion (bei mir in der Klasse Example) auch die entsprechenden GL-calls ändern.
Dort steht z.b.:
glDrawArrays(GL_TRIANGLES,0,3);
Was soviel heisst, dass er Dreiecke zeichnen soll. Die Daten haben kein Offset (zweites Argument = 0) im aktivierten Array und es sollen 3 Vertices gerendert werden (zweites Argument = 3).
Sind beispielsweise im VBO 6 Vertices eingetragen und du möchtest 3 Linien zeichnen, so würde es folgendermassen lauten:
glDrawArrays(GL_LINES,0,6);
Du musst aber natürlich auch beim erstellen des VBOs angeben, wieviel Platz reserviert werdern soll. Dies geschieht bei dem Beispiel von mir in der init-Funktion (ebenfalls Example.cpp).
glBufferData(GL_ARRAY_BUFFER,sizeof(float)*9,vert,GL_STATIC_DRAW);
Wobei ich 9 float-Werte übergeben habe (jeweils 3 pro Vertice). Das muss natürlich ebenfalls angepasst werden.
-
Die ganzen Funktionen und Werte habe ich natürlich alle angepasst. Trotzdem habe ich immer nur etwas in der unteren linken Ecke. Wenn ich jetzt ein zweites Quad zeichnen will, sieht es ganz seltsam aus.
Hab mal zu verdeutlichungen zwei Screens gemacht.
Screen 1
Screen 2
Türkis ist der Hintergrund.
-
Noch ein anderes Problem, wenn ich die VBO's in eine Funktionunktion auslager, die ich dann in er Renderfunktion aufrufe, kommt wieder diese Zugriffsverletzung.
-
Hm, ich weiss jetzt natürlich nicht, was du wo und wie gemacht hast.
Ist jetzt schwer für mich den Fehler zu ermitteln.
Ggf. lädst du einfach nochmal kurz den Code hoch, dann seh es ja.
-
Link
Dummerweise habe ich gerade irgendwas verändert, dass ich schon eine Zugriffsverletzung bei DrawGL() bekomme, auch ohne VBO. Vielleicht findest du ja den Fehler
Ich bin jetzt erstmal bis Dienstag weg, dann meld ich mich wieder.