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.
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.
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my 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
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?)
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 network • my 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
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.
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.