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

Aktuelle Zeit: Mo Jul 14, 2025 22:17

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Di Feb 28, 2012 23:12 
Offline
DGL Member

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

ich habe hier eine Anwendung die rendert Simple Meshes (Cube, Sphere, Cone, etc) im Immediate mode.
Bisher gibt es noch nichtmal farben pro mesh, da ich es noch nicht gebraucht habe, aber nun
möchte ich meinen meshes farben, bzw. materialen/texturen geben.

Das habe ich alles in der Vergangenheit schon des öfteren gemacht, aber das ist schon ein paar jahre her,
daher würde ich gerne wissen, wie man denn heutzutage in einer modernen C++ OpenGL Anwendung Meshes, bzw. Szenen rendert mit Materialen.

Das alte Konzept das ich immer gemacht habe, ich erzeuge mir ein Mesh im Speicher mit der simplen Struktur (Materials < Faces > Indices > Vertices) und render das zeug so wie es kommt mit Statechange für jede Texture, bzw. State changes cachen damit nicht die gleiche Texture mehrfach aktiviert wird und vorher einmalig die Faces nach Materialen sortieren.

Das hat prima funktioniert im Immediate mode, aber ich bin mir sicher man das Performancetechnisch deutlich besser hinkriegen würde.

Wie macht man denn das heutzutage, hat sich da was geändert?

Klar ist, das man heutzutage in nen VBO die index/vertice daten ablegt und mit glDrawElements zeichnet mit entsprechenden offsets.
Aber in der praxis hab ich das auch noch nicht umgesetzt.

Wär dankbar für ein paar tips.

Grüße,
Final


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Feb 29, 2012 09:32 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Beim Immediate Rendering wird sich wohl nicht allzu viel geändert haben. Wenn wir also davon ausgehen das du dein Viewmodel nicht weiter optimieren kannst und Performance
nicht angemessen genug ist, dann wird dir wohl nur ein Umstieg zum Retained Rendering bleiben. Das könnte sich aber je nachdem wie deine Applikation aufgebaut ist als
"unwirtschaftlich", in vielen Fällen sogar komplett ungeeignet, heraustellen.

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Feb 29, 2012 10:17 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
VBOs sind eigentlich garnicht so schwer. Wir haben sogar zwei gute Tutorials/Artikel dafür.
Tutorial Vertexbufferobject für den Einstieg und dann wird
VBO ohne glInterleavedArrays interessant.

grüße

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Feb 29, 2012 11:32 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Ah sorry ihr habt mich falsch verstanden.

Wie VBO´s funktionieren weiß ich... mir geht es darum wie das mit den Materialen in verbindung mit VBO´s funktionieren. Also wie man das sauber und gut performant implementiert. Also wie man die VBO´s mit Texture state changes rendern mit optimierten Drawcalls und wie man die Daten am besten im Speicher/VRAM ablegt.

Dementsprechend würde ich ein für mein Fluid Szenario einen Blender Exporter bauen, der dann Faces/Vertices/Indices/Materials + Fluid Emitter (Entities - kann das blender, Also container mit Metainformationen?)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Feb 29, 2012 12:24 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Finalspace hat geschrieben:
Also wie man die VBO´s mit Texture state changes rendern mit optimierten Drawcalls und wie man die Daten am besten im Speicher/VRAM ablegt.

Naja, anstatt immediate mode aufrufe zu machen machst du zwischen den State-Changes halt VBO Drawcalls.

Finalspace hat geschrieben:
Dementsprechend würde ich ein für mein Fluid Szenario einen Blender Exporter bauen, der dann Faces/Vertices/Indices/Materials + Fluid Emitter (Entities - kann das blender, Also container mit Metainformationen?)

Blender kann alles exportieren. Sind ja nur Python-Skripte. Ist die Frage, ob du ein Modellformat findest, das das speichern kann… ;)

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Feb 29, 2012 16:50 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Lord Horazont hat geschrieben:
Finalspace hat geschrieben:
Also wie man die VBO´s mit Texture state changes rendern mit optimierten Drawcalls und wie man die Daten am besten im Speicher/VRAM ablegt.

Naja, anstatt immediate mode aufrufe zu machen machst du zwischen den State-Changes halt VBO Drawcalls.


Das hätte ich auch gemacht, aber wie stukturiere ich das ganze... Im grunde geht es mir darum ich habe n-meshes in einer szene und möchte diese in "Sinnvolle" VBO´s verpacken, sortiert nach materialen.
Mach ich einfach ein VBO pro Material, oder mach ich pro Mesh ein VBO und render die faces nach Offset?

Weil im grunde ist ja im VBO, bzw auch im Vertex Array der Vorteil, eine vielzahl an vertices direkt zu rendern.
Würde ich anfangen mit glDrawElements pro face was in der regel 3 indices = 1 Dreieck hat per Offset zu rendern, habe ich z.b. bei einem Würfel 12 Drawcalls, auch wenn dieser nur aus einem Material besteht, da es ja sein kann das ein Face dabei ist, das ein anderes Material hat...

Sagt mir wenn ich falsch liege, aber wenn man z.b. nen Komplettes Haus Rendert mit vielen Wänden, Fenstern, Türen etc. das aus einem Mesh besteht, da eine Szene eine Ganze Stadt sein kann das aus mehreren Häusern besteht... dann hätte man ja tausende Drawcalls, da ja jede Wand nicht die gleiche Texture hat.
Und das ist meine Frage, wie macht man das richtig.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Mär 01, 2012 16:29 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Mit der folgenden struktur werd ich das ganze mal probieren:

Code:
  1.  
  2. Scene {
  3.   Materials
  4.   Models
  5. }
  6.  
  7. Model {
  8.   Batches
  9. }
  10.  
  11. Material {
  12.   Textures
  13.   Shader
  14. }
  15.  
  16. Batch {
  17.   VBO+IBO
  18.   Material
  19. }
  20.  


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Mär 01, 2012 17:27 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
würde eher
Code:
  1.  
  2. Scene
  3. {
  4.   Leafs
  5. }
  6.  
  7. Leaf
  8. {
  9.   KDWeightings
  10.   Materials
  11.   Leafs
  12.   ChildLeafs
  13.   Batch
  14.   Models
  15. }
  16.  
  17. Model
  18. {
  19.    Materials
  20.    Attributes <-- Matrizen, Attributes... halt alles zum erstellen eines VBO im falle von VBO == invalidate
  21.    Indices
  22. }
  23.  
  24. Material
  25. {
  26.    Tex
  27.    Shader
  28.    Indices
  29. }
  30.  
  31. Batch
  32. {
  33.   VBO+IBO
  34.   Materials
  35.   Models
  36. }
  37.  

_________________
Meine Homepage


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 6 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.010s | 14 Queries | GZIP : On ]