Einstieg in OpenGL, Anfängerprobleme



  • 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 dir 👍

    EDIT: 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.



  • 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.


Anmelden zum Antworten