Einstieg in OpenGL, Anfängerprobleme
-
Hi, vielleicht hilft dir dieser Artikel weiter:
http://www.spieleprogrammierung.net/2010/07/opengl-vertexbuffer-und-indexbuffer.html
sowie dieses Tutorial:
http://www.spieleprogrammierung.net/2010/03/opengl-3-rendern-eines-texturierten_25.html
weitere Artikel und Tutorials zu OpenGL 3 und höher findest du hier:
http://www.spieleprogrammierung.net/
viel Spaß beim Lernen!
-
So hab jetzt endlich wieder Zeit, mich dem Problem zu widmen
Scorcher24 schrieb:
Wenn Du GLew verwendest, brauchst Du die Dinger nicht selber mit glGetProcAdress laden^^.
Du musst das glewInit() nur einmal aufrufen, aber erst wenn der OpenGL-Context erzeugt wurd.
rya.Wenn ich ein paar V-Sync Funktionen benutzen will, muss ich zu dem glewInit() zusätzlich die Funktionspointer laden, ansonsten klappts nicht. Die Funtkion rufe ich nach glewInit() auf, und RC wurde schon vor glewInit() erstellt.
AlexMaRu schrieb:
Hi, vielleicht hilft dir dieser Artikel weiter:
http://www.spieleprogrammierung.net/2010/07/opengl-vertexbuffer-und-indexbuffer.html
sowie dieses Tutorial:
http://www.spieleprogrammierung.net/2010/03/opengl-3-rendern-eines-texturierten_25.html
weitere Artikel und Tutorials zu OpenGL 3 und höher findest du hier:
http://www.spieleprogrammierung.net/
viel Spaß beim Lernen!
Danke, da werde ich mal rein schauen. Aber ich suche eher mehr was ab OpenGL 1.5 - 2.0, möchte auch ein bisschen abwärtskompatibel bleiben.
-
So ich hab jetzt mittels
glGetBufferParameterivARB(vboid, GL_BUFFER_SIZE_ARB, &bufferSize);
die Buffer-Größe ermittelt, und die ist null.
Also muss irgendwas an dieser Zeile falsch sein:glBindBufferARB(GL_ARRAY_BUFFER_ARB, vboid); glBufferDataARB(GL_ARRAY_BUFFER_ARB, sizeof(vertices), vertices, GL_STATIC_DRAW_ARB);
vertices sieht so aus:
GLint vertices[] = {0,0,50,0,50,50,0,50};
Weiß da einer weiter, was man noch machen muss, damit die Daten auch in den Buffer geschrieben werden?
-
Ich habs jetzt geschafft, dass die VBOs gezeichnet werden und zwar so:
// initialisieren glGenBuffers(1, &vboid); glBindBuffer(GL_ARRAY_BUFFER, vboid); glBufferData(GL_ARRAY_BUFFER, 8*sizeof(GLint), vertices, GL_STATIC_DRAW); void* ptr = glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY); glVertexPointer(2, GL_INT, 0, ptr); glUnmapBuffer(GL_ARRAY_BUFFER); // rendern glEnableClientState(GL_VERTEX_ARRAY); glDrawArrays(GL_QUADS, 0, 4); glDisableClientState(GL_VERTEX_ARRAY);
Allerdings widerspricht das allen Tutorials die ich gelesen habe. z. B. dem hier. Laut diesem Tutorial würde ich Punk 1.4 und 1.5 auf einmal benutzen.
Zudem steht bei jeder Beschreibung von glVertexPointer, dass der letzte Parameter das Offset ist
-
Hm, glVertexPointer sollte eigentlich nur 4 Paramter haben
Also bei mir funktioniert folgendes einwandfrei:
GLint vertices[] = {0,0,2,0,2,2,0,2}; glGenBuffers(1,&vboid); glBindBuffer(GL_ARRAY_BUFFER,vboid); glBufferData(GL_ARRAY_BUFFER,8*sizeof(GLint),vertices,GL_STATIC_DRAW); glVertexPointer(2,GL_INT,0,0); glEnableClientState(GL_VERTEX_ARRAY); glDrawArrays(GL_QUADS,0,4); glDisableClientState(GL_VERTEX_ARRAY);
-
Hmm bei mir kommt wieder die Zugriffsverletzung an Position 0.
Irgendwie scheint dem glVertexPointer nicht ganz klar zu sein, dass ich ein VBO hab.
Und VBOs werden von meiner GraKa ganz sicher unterstützt. Ich hab schon alle möglichen Funktionen und externen Tests probiert, und alle sagen, dass meine GraKa VBOs kann. Die Beispiele aus dem Inet laufen ja auch alle auf meinem PC.
-
Hmpf - eigenartig.
Was gibt denn glGetString(GL_VERSION) und glewGetString(GLEW_VERSION) aus?
-
2.1.8545 Release
und
1.5.6
-
*grübel* komm nicht drauf, worans liegen könne
Hast du es schonmal mit
glVertexPointerEXT(2,GL_INT,0,4,0);
probiert?
-
Ich werd verrückt das klappt
Monate des Frustes endlich vorbei
Danke dirEDIT: NEIN
Ich hab noch ein glVertexPointer von vorher übersehen, das direkt auf den Array gezeigt hat...
-
Wenn du Lust hast - pack mal alles zusammen in ein zip oder rar Archiv und schick mir das per Mail (also nicht nur Programmteile, sondern den kompletten code).
Dann schau ich mir des mal genauer an - vlt find ich ja das Problem.
-
So hab das mal alles hochgeladen.
Link
Die Fehlermeldung die kommt ist diese hier:Eine Ausnahme (erste Chance) bei 0x6923c104 in OpenGL.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000. Unbehandelte Ausnahme bei 0x6923c104 in OpenGL.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.
Wenn ich die Binary ganz normal starten will sagt Windows immer das hier:
OpenGL.exe hat ein Problem festgestellt und muss beendet werden.
-
Tja - guter Rat ist teuer.
Kann keinen Fehler finde.
Programm läuft bei mir auch einwandfrei.
-
Ich werde demnächst mal einen anderen Compiler testen. Wenn es dann immernoch nicht klappt, liegt es wohl an der Hardware. Vielleicht wrde ich mir dann auch mal eine aktuellere GraKa besorgen.
-
Funktioniert das bei dir:
vboTest
-
Ja tut es.
Kann es sein, dass mein Compiler (MSVC 10.0) verbuggt ist? Und welchen anderen kann ich mir herunterladen, um es mal mit einem anderen zu probieren?EDIT:
Mit sind gerade die Logfiles aufgefallen, und die sagen auch, dass alles OK ist.
-
Hm, nö, ich arbeite auch mit MSVS2010.
Binde die libs zwar nicht über pragmas ein sondern geb sie bei den Projekteigenschaften unter Linker-Eingabe an, aber daran sollte es wohl nicht liegen denk ich.
-
Es kann ja auch vielleicht daran liegen, das mein Setup defekt ist, oder bei der Installation nichts alles Reibunglos lief. Ich werde jetzt auch mal glext anstelle von glew ausprobieren. Vielleicht tuts ja das.
Könntest du mir vielleicht auch mal die Source-Dateien von deiner exe geben? Ich werde mal versuchen diese zu kompilieren. Mal schauen ob das dann klappt.
-
Hier ist der sourcecode.
Hab unnötige Sachen mal entfernt (sowas wie das Erstellen der logfiles, Counter etc.).
Hoffe es ist einigermassen verständlich.Keine pragmas - da ich wie gesagt über die Projekteigenschaften die libs angebe, kannst du aber machen wie du möchtest.
Probiers einfach mal
-
Klappt super
Auch wenn ich über #pragma linke.
Hmm ich werde mein bestehendes Projekt mal auf dein Beispiel aufbauen. Und dann schauen ob es noch klappt.