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

Aktuelle Zeit: So Jul 20, 2025 00:16

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: VBO + Index
BeitragVerfasst: Fr Okt 12, 2007 15:54 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 07, 2006 13:37
Beiträge: 83
Wohnort: Partenheim
Hallo!

Ich habe das Problem, dass die Daten meines Objekts so vorliegen, dass sie sich mit allen, mir bekannten, Methoden nicht als VBO in den Grafikkarten-RAM laden lassen.

Meine Vertex-Daten haben folgende Struktur:
Code:
  1. Vertex  : Array of TVector3f;
  2. Normal  : Array of TVector3f;
  3. UVCoord : Array of TVector2f;


Und ein Triangle-Index-Array, das, pro Triangle 3x3 Referenzen enthält (für jeden Vertex des Dreiecks jeweils VertexPosition, VertexNormal und VertexUVCoord), welche auf die 3 o.g. Arrays verweisen.

Code:
  1. TriangleIndexArray : Array of Array [0..2] of Array [0..2] of Integer;


Ich stelle mir vor, dass es die einfachste und sparsamste Lösung wäre, die 3 Arrays nacheinander in den GRAM hochzuladen und dann via glDrawRangeElements mit der IndexListe ("indices") auf die einzelnen VertexElemente zuzugreifen.
Leider erwartet die IndexListe nur einen einzigen Pointer pro Paket (GL_T2F_N3F_V3F). Dieses Paket existiert bei mir aber nicht. Ich bräuchte eine dreimal so große IndexListe, die pro Paket 3 Referenzen erwartet: Eine für T2F, eine für N3F und eine für V3F.

Gibt es so etwas?

Vielen Dank schon mal für die Hilfe,
Conan

_________________
THE TRUTH IS NOT OUT THERE!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 12, 2007 16:36 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Die Funktion glInterleavedArrays ist nur eine Vereinfachung der normalen VBO Benutzung. Du kannst mittels glTexCoordPointer, glNormalPointer und glVertexPointer das Layout deiner Daten ziemlich frei definieren.

Dabei müssen diese nicht immer TNV TNV TNV sein sondern können auch TTT NNN VVV sein. Oder wegen meiner noch mit was anderem dazwischen. Das kannst du nach belieben einstellen. glInterleavedArrays erwartet die Daten aber immer nach der ersten Methode.

Was aber nicht geht ist, dass du bei dem Vertex 3 die Texturkoordinaten 17 die Normale 4 und den Vertex 9 nimmst. Das geht nicht. Es gibt einen Indexbuffer und da steht drin, dass das Element 17 benutzt wird. Und das wird dann aus den einzelnen Buffern genommen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 12, 2007 18:55 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 07, 2006 13:37
Beiträge: 83
Wohnort: Partenheim
Hi Lossy ex!

Vielen Dank für deine Antwort, das bringt mich schon mal um Einiges weiter. :P

Der Rest ist allerdings unheimlich schade :x (ich beziehe mich auf den letzten Abschnitt deiner Antwort).
Heißt das, ich muss immer genau so viele TexturKoordinaten wie Normalen wie VertexPositionen im GRAM haben?
Dann bleibt aber die Methode glDrawRangeElements(...) immer noch die sparsamste (auf die Größe des GRAMs bezogen)?

Conan

_________________
THE TRUTH IS NOT OUT THERE!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 12, 2007 19:57 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ja. Also nach meinem Wissen benötigst du für jeden Vertex sowohl auch die normalen als auch die Texturkoordinaten. Also alles was du benutzen willst.

Wenn du eine zusammenhängende Fläche hast und du die Vertexdaten jeweils teilst sollte glDrawRangeElements eigentlich mit am platzsparensten sein. Bzw kann die Grafikkarte durch den Index evtl noch etwas besser optimieren.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 12, 2007 22:44 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 07, 2006 13:37
Beiträge: 83
Wohnort: Partenheim
Vielen Dank!
Dann werd' ich mal versuchen, das so zu machen. :D

_________________
THE TRUTH IS NOT OUT THERE!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 24, 2007 14:42 
Offline
DGL Member

Registriert: Di Okt 23, 2007 10:20
Beiträge: 84
unwichtig


Zuletzt geändert von elektrokrach am Di Nov 27, 2007 11:38, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 24, 2007 18:19 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 07, 2006 13:37
Beiträge: 83
Wohnort: Partenheim
Interessant, vielen Dank.
Komm' ich drauf zurück, falls ich mit bisheriger Methode, wie du schon gesagt hast, lediglich
Zitat:
die Vertices für jede Fläche zu doppeln
, auf große Performance-Einbußen stoßen sollte. Für das VBO sortiere ich nämlich bisher nichts, aber die Face-Daten stammen aus Blender und daher gehe ich davon aus, dass aufeinander folgende Faces auch in der Datei nah beieinander liegen (ist ja immerhin BLENDER!!! :wink: ).

Conan

_________________
THE TRUTH IS NOT OUT THERE!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 24, 2007 19:16 
Offline
DGL Member

Registriert: Di Okt 23, 2007 10:20
Beiträge: 84
unwichtig


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 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.007s | 15 Queries | GZIP : On ]