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

Aktuelle Zeit: Fr Jul 18, 2025 04:39

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



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Probleme mit VBO´s
BeitragVerfasst: Sa Okt 22, 2011 11:04 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Servus,

ich hänge mal wieder bei den VBO´s. Eigentlich hab ich das schon vielemale gemacht, aber jedesmal stoss ich da auf Probleme.
Meiner meinung nach, erzeuge und rendere ich das richtig, aber dargestellt wird nichts. Immediate Rendern geht.

Erzeugen tue ich das so:

Code:
  1.  
  2.  
  3. // Speicher für Daten reservieren
  4. unsigned int numVertices = ein wert für die vertices;
  5. float* vertsAndNormals = new float[numVertices * 6]; // Erst kommt Vertex XYZ, dann Normal XYZ, dann Vertex XYZ, und wieder Normal XYZ... etc.
  6.  
  7. unsigned int numIndices = ein wert für die indices;
  8. unsigned int* indices = new unsigned int[numIndices];
  9.  
  10. // Daten befüllen......
  11.  
  12. // Vertex Buffer erzeugen und daten komplett hochladen
  13. glGenBuffersARB(1, &iVBO);
  14. glBindBufferARB(GL_ARRAY_BUFFER_ARB, iVBO);
  15. glBufferDataARB(GL_ARRAY_BUFFER_ARB, sizeof(float) * 6 * numVertices, vertsAndNormals, GL_STATIC_DRAW_ARB);
  16.  
  17. // Index Buffer erzeugen
  18. glGenBuffersARB(1, &iIBO);
  19. glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER, iVBO);
  20. glBufferDataARB(GL_ELEMENT_ARRAY_BUFFER, numIndices * sizeof(unsigned int), indices, GL_STATIC_DRAW_ARB);
  21.  
  22. // Daten im Speicher löschen, da diese ja nun im VRAM sind
  23. delete indices;
  24. delete vertsAndNormals;
  25.  
  26.  


Und dann das ganze in der Renderschleife Rendern:

Code:
  1.  
  2. glEnableClientState(GL_VERTEX_ARRAY);
  3. glEnableClientState(GL_NORMAL_ARRAY);
  4.  
  5. glBindBufferARB(GL_ARRAY_BUFFER_ARB, iVBO);
  6. glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER, iIBO);
  7.  
  8. // [V1X,V1Y,V1Z,N1X,N1Y,N1Z, V2X...]
  9. // Stride = 6 * float
  10. glNormalPointer(GL_FLOAT, sizeof(float) * 6, (void*)(3 * sizeof(float))); // Normal beginnt bei 3 * float im speicher.
  11. glVertexPointer(3, GL_FLOAT, sizeof(float) * 6, (void*)((char*)NULL)); // Vertex beginnt bei erster position im speicher
  12.  
  13. glDrawElements(GL_TRIANGLES, iIndexCount, GL_UNSIGNED_INT, (void*)((char*)NULL));
  14.  
  15. glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER, 0);
  16. glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
  17.  
  18. glDisableClientState(GL_NORMAL_ARRAY);
  19. glDisableClientState(GL_VERTEX_ARRAY);
  20.  


Was ist denn daran falsch? Ich seh den Fehler nicht, oder kann man keine Strides für VBO´s verwenden?

So render ich das ganze über den immediate mode:

Code:
  1.  
  2. glBegin(GL_TRIANGLES);
  3. for (unsigned int i = 0; i < numIndices; i++)
  4. {
  5.     glNormal3f(vertsAndNormals[(indices[i] * 6) + 3],
  6.                    vertsAndNormals[(indices[i] * 6) + 4],
  7.                    vertsAndNormals[(indices[i] * 6) + 5]);
  8.     glVertex3f(vertsAndNormals[(indices[i] * 6) + 0],
  9.                   vertsAndNormals[(indices[i] * 6) + 1],
  10.                   vertsAndNormals[(indices[i] * 6) + 2]);
  11. }
  12. glEnd();
  13.  


Danke,
Final


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Probleme mit VBO´s
BeitragVerfasst: Sa Okt 22, 2011 11:24 
Offline
DGL Member

Registriert: Mi Jan 21, 2009 09:05
Beiträge: 13
Hallo,

du uebergibst deinem IBO den falschen Buffer.

Du machst:
Code:
  1. // Index Buffer erzeugen
  2. glGenBuffersARB(1, &iIBO);
  3. glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER, iVBO);
  4. glBufferDataARB(GL_ELEMENT_ARRAY_BUFFER, numIndices * sizeof(unsigned int), indices, GL_STATIC_DRAW_ARB);


Es sollte sein:
Code:
  1. // Index Buffer erzeugen
  2. glGenBuffersARB(1, &iIBO);
  3. glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER, iIBO);
  4. glBufferDataARB(GL_ELEMENT_ARRAY_BUFFER, numIndices * sizeof(unsigned int), indices, GL_STATIC_DRAW_ARB);


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Probleme mit VBO´s
BeitragVerfasst: Sa Okt 22, 2011 12:40 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Ah danke, das war definitiv ein abtipp Fehler, aber leider hat es das problem nicht gelöst.

Beim erzeugen des VBO´s selbst ohne Index Buffer bekomme ich einen opengl fehler: GL_INVALID_ENUM mit folgendem simplen code:

Code:
  1.  
  2. glGenBuffersARB(1, &iVBO);
  3. glBindBufferARB(GL_ARRAY_BUFFER_ARB, iVBO);
  4. glBufferDataARB(GL_ARRAY_BUFFER_ARB, numVertices * sizeof(float) * 6, vertsAndNormals, GL_STATIC_DRAW_ARB);
  5.  


Habe es auch nur mit normalen Vertex Array´s rendern lassen, das hat ebenfalls funktioniert.

EDIT* Ah kommando zurück... es scheint schon nach dem initialisieren von OpenGL ein fehler zu geben :(


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Probleme mit VBO´s
BeitragVerfasst: Sa Okt 22, 2011 12:49 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Hat sich erledigt. Es lag tatsächlich an folgendem part im setup von OpenGL

Nachdem ich diesen code auskommentiert habe, ging es.

Code:
  1.  
  2. GLfloat shininess[] = {128};
  3. glLightfv(GL_LIGHT0, GL_SHININESS, shininess);
  4.  


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 14 Queries | GZIP : On ]