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

Aktuelle Zeit: Di Mai 14, 2024 22:44

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: VBO's mit glVBO..
BeitragVerfasst: Mo Apr 01, 2013 10:44 
Offline
DGL Member

Registriert: Do Mär 05, 2009 20:17
Beiträge: 284
Wohnort: Kaiserslautern
Hallo, wie ja schon im anderen Faden geschrieben (http://www.delphigl.com/forum/viewtopic.php?f=10&t=10796) versuche ich mich an VBO's.

Mir wurd empfohlen es für den Anfang mit glVBO zu versuchen...

das Probiere ich gerade und versuche mich dabei soweit es geht 1:1 ans Sample zu halten das dabei war...

hier etwas code:

Also mein VBO sähe dann so aus:

Code:
  1.    
  2.     model.vbo.AddVertexElementDraft(draft_vertex_3f);
  3.     model.vbo.AddVertexElementDraft(draft_normal_3f);
  4.     model.vbo.VertexCount := FlaechenAnzahl*3;
  5.  


Das Befüllen passiert derzeit noch parallel zu meinen alten arrays..
So zum beispiel auch die indices
Code:
  1.  
  2. model.vbo.AddIndex(data_type_ubyte);                                        
  3. model.vbo.IndexCount := length(model.narray);
  4. for i:=0 to length(model.indices)-1 do
  5. begin
  6.   model.vbo.WriteIndexUByte( i, i);
  7. end;
  8. end;
  9.  


jetzt versuch ich da auch zu rendern (!)
dafür in meiner renderschleife:

Code:
  1.    
  2. VBO := TCTB3d(frmMainMPV2.PartManager.Models[TTreeInstanz(frmMainMPV2.partmanager.InstanzList[i]).ModelListIndex]).vbo;
  3.     vbo.BindVertexBuffer;
  4.     vbo.ActivateElement(element_type_vertex);
  5.     vbo.ActivateElement(element_type_normal);

soweit die Vorbereitung...

jetzt haut mir aber

Code:
  1. glDrawElements(GL_Triangles, vbo.IndexCount, GL_UNSIGNED_BYTE, Pointer(vbo.VertexDataSize));


eine Zugriffsverletzung um die Ohren:

Bild

edit: was ich noch sagen sollte: Der einzige größere Unterschied zum Sample ist der Aufbau des VBO's und das ich statt QUADS halt TRIANGLES hab.
edit2:

ok die Zugriffsverletzungsursache konnte ich finden..

da hab ich ein
Code:
  1.  model.vbo.GenerateBuffer;
vergessen.

aber auch beim befüllen scheint noch der Wurm drin zu sein:
Bild

naja immerhin ist jetzt mal was zu sehen, und ich geh jetzt lieber Ostereier suchen statt Programmfehler.
auf bald.


Zuletzt geändert von Wölfchen am Mo Apr 01, 2013 11:18, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO's mit glVBO..
BeitragVerfasst: Mo Apr 01, 2013 11:18 
Offline
Compliance Officer
Benutzeravatar

Registriert: So Aug 08, 2010 08:37
Beiträge: 460
Programmiersprache: C / C++ / Lua
Du musst es folgendermaßen aufrufen:

glDrawElements(GL_Triangles, vbo.IndexCount, GL_UNSIGNED_BYTE, 0);

Die Grafikkarte versucht sonst iwo in ihrem Hauptspeicher auf Daten zuzugreifen - die dort aber nicht verfügbar sind.

_________________
offizieller DGL Compliance Beauftragter
Never run a changing system! (oder so)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO's mit glVBO..
BeitragVerfasst: Mo Apr 01, 2013 12:20 
Offline
Compliance Officer
Benutzeravatar

Registriert: So Aug 08, 2010 08:37
Beiträge: 460
Programmiersprache: C / C++ / Lua
da scheinen die Indices iwie kaputt zu sein... wie lädts du die denn ins VBO?

_________________
offizieller DGL Compliance Beauftragter
Never run a changing system! (oder so)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO's mit glVBO..
BeitragVerfasst: Mo Apr 01, 2013 16:14 
Offline
DGL Member

Registriert: Do Mär 05, 2009 20:17
Beiträge: 284
Wohnort: Kaiserslautern
end hat geschrieben:
Du musst es folgendermaßen aufrufen:

glDrawElements(GL_Triangles, vbo.IndexCount, GL_UNSIGNED_BYTE, 0);


Danke, aber dadurch wird es eher schlechter...

end hat geschrieben:
da scheinen die Indices iwie kaputt zu sein... wie lädts du die denn ins VBO?


nuja das ist eigentlich ganz simpel, da ich ja vertexarray und normalarray hatte hab ich mir ne procedur geschrieben die das einfach ins vbo holt...
Code:
  1. procedure Tctb3DLoader.buildVBO;
  2. var i: integer;
  3. var vertexcount: integer;
  4. begin
  5.   vertexcount := length(model.varray);
  6.   model.vbo.AddVertexElementDraft(draft_vertex_3f);
  7.   model.vbo.AddVertexElementDraft(draft_normal_3f);
  8.   model.vbo.VertexCount := vertexcount;
  9.  
  10.  
  11.   model.vbo.AddIndex(data_type_ubyte);
  12.   model.vbo.IndexCount := model.vbo.vertexcount;
  13.   for i := 0 to vertexcount-1 do
  14.   begin
  15.     model.vbo.OpenVertex(i);
  16.     // hier die normalen reinschreiben
  17.     model.vbo.Write3f(element_type_normal, model.narray[i].x,
  18.                                            model.narray[i].y,
  19.                                            model.narray[i].z);
  20.      //hier die vertices reinschreiben
  21.      model.vbo.Write3f(element_type_vertex, model.varray[i].x,
  22.                                            model.varray[i].y,
  23.                                            model.varray[i].z);
  24.      //hier die indices
  25.      model.vbo.WriteIndexUByte(i,i);
  26.   end;
  27.   model.vbo.GenerateBuffer;
  28. end;


es ist jetzt auch ein wenig besser aber nur bei winzig kleinen modellen, wenns auch nur etwas groesser wird faengts an zu spinnen... siehe den kegel:

Bild

ich verstehe auch nicht wieso es völlig egal zu sein scheint ob ich nun zuerst die normalen und dann die vertices ins VBO füttere oder umgekehrt, das Ergebnis sieht identisch aus.

aber mein Verdacht liegt derzeit tatsächlich beim hinteren teil von

Code:
  1. glDrawElements(GL_Triangles, vbo.IndexCount, GL_UNSIGNED_BYTE, Pointer(vbo.VertexDataSize));


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO's mit glVBO..
BeitragVerfasst: Di Apr 02, 2013 05:21 
Offline
DGL Member

Registriert: Do Mär 05, 2009 20:17
Beiträge: 284
Wohnort: Kaiserslautern
Da ich in der Variante mit glVBO partout keinen Fehler auf meiner Seite finden konnte habe ich es letztlich aufgegeben und nochmal mit dem Tutorial / Wiki Eintrag hier versucht: http://wiki.delphigl.com/index.php/VBO_ohne_glInterleavedArrays
Das ist sensationell gut geschrieben und auch für meine bescheidenen Kenntnisse einigermaßen nachvollziehbar.

Ich mußte zwar einiges ändern um meine großen Daten damit handeln zu können aber so wie es jetzt aussieht habe ich es wohl gerade vor 10 Minuten geschafft..

ein Fehler scheint leider auch drin zu sein, zumindest hat mein Compiler mir diese Zeilen um die Ohren gehauen:
Code:
  1.   glVertexPointer(4, GL_FLOAT, STRIDE, POS_OFFSET);
  2.   glColorPointer(4, GL_FLOAT, STRIDE, COL_OFFSET);


Die Fehlermeldung war irgendwas mit inkompatible Typen Integer und Pointer oder so.
Nach einigem Herumprobieren und Getüftel hab ich es aber zum Laufen bekommen!

Ich danke dem Verfasser dieses WIKI eintrages, (Traude) den ich nur zufällig in google gefunden habe (der war irgendwo verlinkt) denn wenn man auf der WIKI seite VBO eingibt landet man automatisch in dem anderen Tutorial, das - zumindest für meine Fähigkeiten - zu hoch ist.. Vielleicht könnte man die WIKI so ändern das man auch den oben verlinkten Eintrag finden kann wenn man nach VBO sucht!

Ach ja, der Geschwindigkeitszuwachs war die grauen Haare wert! mein größtes Modell (ca. 800MB knapp 400 verschiedene Teile) rendert jetzt mit 60FPS+ vorher warens 0,4 FPS

EDIT: Nach der Freude kommt der Frust... die Rechner mit NVIDIA hier haun mir ne ganz üble Zugriffsverletzung um die Ohren in Modeul nvogl32.dll Bildschirm wird kurz schwarz und Anwendung kackt Filmreif ab. Jetzt stellt sich die Frage, was kann ATI was Nvidia nicht kann? bzw. Welchen Regentanz muß ich aufführen damits hier auch geht?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO's mit glVBO..
BeitragVerfasst: Di Apr 02, 2013 08:44 
Offline
Compliance Officer
Benutzeravatar

Registriert: So Aug 08, 2010 08:37
Beiträge: 460
Programmiersprache: C / C++ / Lua
komisch - normalerweise ist es genau umgedreht ^^

genaue Fehlermeldung?

_________________
offizieller DGL Compliance Beauftragter
Never run a changing system! (oder so)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO's mit glVBO..
BeitragVerfasst: Di Apr 02, 2013 09:12 
Offline
DGL Member

Registriert: Do Mär 05, 2009 20:17
Beiträge: 284
Wohnort: Kaiserslautern
Genaue Fehlermeldung hier ist:

Zitat:
Zugriffsverletzung bei Adresse 69AB06B5 in Modul 'nvoglv32.DLL' Lesen von Adresse 05FFA668.


Compiler hab ich hier keinen..

Die Grafikkarte ist eine NVIDIA Quadro FX 1800
Leider finde ich wenig über den Treiber, weil hier auch einiges für "doofe user" von der IT gesperrt ist.. Hier steht Treiberdatum 10.12.2010 und Treiberversion 8.17.12.6130


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO's mit glVBO..
BeitragVerfasst: Di Apr 02, 2013 10:39 
Offline
Compliance Officer
Benutzeravatar

Registriert: So Aug 08, 2010 08:37
Beiträge: 460
Programmiersprache: C / C++ / Lua
dafür kannste Saschas Tool glCapsViewer nutzen ^^ das läuft auch ohne admin zg. etc...

_________________
offizieller DGL Compliance Beauftragter
Never run a changing system! (oder so)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO's mit glVBO..
BeitragVerfasst: Di Apr 02, 2013 10:46 
Offline
DGL Member

Registriert: Do Mär 05, 2009 20:17
Beiträge: 284
Wohnort: Kaiserslautern
Danke, kann es mir aber erst heut Abend anschaun - gibt es eine Art Doku / Zusammenfassung der gängigsten "Fettnäpfchen" zwischen ATI und NVIDIA?
Ich vermute mal es ist nichts großes aber ich kanns halt zuhaus nicht testen, weil ich zuhaus kein NVIDIA hab..

Ich erinner mich das ich ganz am Anfang meiner OpenGL Geschichte auch mal sowas hatte, da wollte NVIDIA partout ne 0.0 wo ATI auch ne 0 geschluckt hat.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO's mit glVBO..
BeitragVerfasst: Di Apr 02, 2013 10:47 
Offline
Compliance Officer
Benutzeravatar

Registriert: So Aug 08, 2010 08:37
Beiträge: 460
Programmiersprache: C / C++ / Lua
das mit 1.0 und 0 war bei Shadern - da ist ATI glaub ich toleranter... (weswegen ich auch immer brav NVIDIA Grakas bevorzuge ^^)

Zeig doch mal bitte den Code, insb. das mit glVertexPointer...

EDIT:

So eine Fettnäpfchensammlung wäre mir leider nicht bekannt :(

_________________
offizieller DGL Compliance Beauftragter
Never run a changing system! (oder so)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO's mit glVBO..
BeitragVerfasst: Di Apr 02, 2013 10:54 
Offline
DGL Member

Registriert: Do Mär 05, 2009 20:17
Beiträge: 284
Wohnort: Kaiserslautern
jo code liefere ich heut abend, hätte sowieso noch einige fragen auch zum tutorial bzw wiki eintrag (den ich echt klasse finde! schade das man den hier nicht findet (sagte ich schon))

aber das mit der 1.0 und 1 kann ich mir nicht vorstellen das das mit shadern zu tun hat, weil shader *hust* sind für mich nach wie vor bömische dörfer und da lass ich mal weiterhin brav die finger von.
Vielleicht irgendwann mal, wenn das mit den VBO's stabil läuft wage ich mich da dran


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


Wer ist online?

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