Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Mai 15, 2024 02:17

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Autor Nachricht
BeitragVerfasst: Mi Feb 01, 2012 17:00 
Offline
DGL Member

Registriert: Mo Apr 27, 2009 11:19
Beiträge: 35
Hallo alle miteinander,

in Qt versuche ich gerade obj.-Dateien in mein Programm reinzuladen. Dabei habe ich mich an diesem Beispiel orientiert.

Folgende Modifikationen habe ich vorgenommen:

Einfügen zwei weiterer Klassen. Zum einen die GLWidget-Klasse, die die Funktion paintGL enthält, welche in OpenGLScene in der Funktion drawbackground aufgerufen wird. Aus der Klasse Model habe ich den Konstruktor zum Laden des Models entnommen und in GLWidget eingefügt. Somit enthält GLWidget die Arrays mit den zugehörigen obj.-Daten. In der Klasse Model bleibt die render-Funktion. Schließlich eine weitere Klasse PG, welche ein paar Modifikationen am Objekt vornimmt, hier aber keine weitere Rolle spielt.
In der Klasse OpenGLScene sind die Befehle zum Laden eines Modells folgendermaßen verändert:

Code:
  1.  
  2. GLWidget *loadModel(const QString &filePath)
  3. {
  4.     return new GLWidget(filePath);
  5. }
  6.  
  7. void OpenGLScene::loadModel()
  8. {
  9.     loadModel(QFileDialog::getOpenFileName(0, tr("Choose model"), QString(), QLatin1String("*.obj")));
  10. }
  11.  
  12. void OpenGLScene::loadModel(const QString &filePath)
  13. {
  14.     if (filePath.isEmpty())
  15.         return;
  16.     setModel(::loadModel(filePath));
  17. }
  18.  
  19.  
  20. void OpenGLScene::setModel(GLWidget *model)
  21. {
  22.     delete test;
  23.     test = model;
  24.     update();
  25. }
  26.  


Auf Grund dieser Modifikationen war es nun nicht mehr möglich das Laden der Objekte mit Threads zu realisieren. Somit habe ich auch die "Threadnutzung" (oder wie man das auch immer nennt) mit QtCurrent entfernt.

Jetzt zu meinem Problem.

Wenn ich in der paintGL-Klasse folgendes mache, stürzt mein Programm ab:

Code:
  1.  
  2. //pg = Objekt der klasse PG
  3.  
  4. paintGL()
  5. {
  6. ....
  7. pg->drawPG(.....)
  8. }
  9.  


Wiederum ruft dann die Klasse PG folgendes auf:
Code:
  1.  
  2. //model = Objekt der klasse Model
  3.  
  4. paintGL()
  5. {
  6. ....
  7. model->render(.....)
  8. }
  9.  


In render

Code:
  1.  
  2.     glEnableClientState(GL_VERTEX_ARRAY);
  3.     ......
  4.  
  5.     glEnableClientState(GL_NORMAL_ARRAY);
  6.     glVertexPointer(3, GL_FLOAT, 0, (float *)points.data());
  7.     glNormalPointer(GL_FLOAT, 0, (float *)normals.data());
  8.     glDrawElements(GL_TRIANGLES, pointIndices.size(), GL_UNSIGNED_INT, pointIndices.data());
  9.  
  10.     glDisableClientState(GL_VERTEX_ARRAY);
  11.     .....
  12.  


Ausm Debuggen habe ich jetzt rausgefunden, dass das Programm an der Stelle glEnableClientState(GL_VERTEX_ARRAY); abstürzt. Mir ist aber überhaupt nicht klar warum.

Hat vielleicht jemand von euch eine Idee woran das liegen könnte. Ich wäre für jede Hilfe mehr als dankbar


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 11 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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.022s | 17 Queries | GZIP : On ]