Blender Animation mit OpenGL rendern
Blender Animation mit OpenGL rendern
Hiho,
folgendes Problem: Wie rendere ich eine Blender-Animation mit OpenGL unter Verwendung von C++?
Beim Googlen bin ich darauf gestoßen: Export als .obj-File. Die dann vom Programm parsen lassen und die Vertices etc. mit OpenGL rendern. Allerdings geht das nur für statische Objekte, richtig? Wie gehe ich vor, wenn ich bei einer Animation verschiedene Teile des Meshs verschieben oder drehen muss. Beschreibe ich die Verschiebung und Drehung (ähnlich wie die Vertices in der obj-File) oder ist da eine andere Lösung "schöner"?
Btw möchte ich keine fertige Engine verwenden, sondern wirklich grundlegend arbeiten - hauptsächlich des Verstehens wegen.
LG Glocke
folgendes Problem: Wie rendere ich eine Blender-Animation mit OpenGL unter Verwendung von C++?
Beim Googlen bin ich darauf gestoßen: Export als .obj-File. Die dann vom Programm parsen lassen und die Vertices etc. mit OpenGL rendern. Allerdings geht das nur für statische Objekte, richtig? Wie gehe ich vor, wenn ich bei einer Animation verschiedene Teile des Meshs verschieben oder drehen muss. Beschreibe ich die Verschiebung und Drehung (ähnlich wie die Vertices in der obj-File) oder ist da eine andere Lösung "schöner"?
Btw möchte ich keine fertige Engine verwenden, sondern wirklich grundlegend arbeiten - hauptsächlich des Verstehens wegen.
LG Glocke
Rage - ein "modernes" Rogue-like (C++11, SFML)
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Blender Animation mit OpenGL rendern
Interessante Frage - geht das?Glocke hat geschrieben:folgendes Problem: Wie rendere ich eine Blender-Animation mit OpenGL unter Verwendung von C++?
WaveFront Obj unterstützt meines Wissens keine Animation.Glocke hat geschrieben:Beim Googlen bin ich darauf gestoßen: Export als .obj-File. Die dann vom Programm parsen lassen und die Vertices etc. mit OpenGL rendern. Allerdings geht das nur für statische Objekte, richtig?
Wo möchtest Du die Transformation denn beschreiben? Möchtest Du das in einem Textfile beschreiben oder in C++?Glocke hat geschrieben:Wie gehe ich vor, wenn ich bei einer Animation verschiedene Teile des Meshs verschieben oder drehen muss. Beschreibe ich die Verschiebung und Drehung (ähnlich wie die Vertices in der obj-File) oder ist da eine andere Lösung "schöner"?
In einem Textfile müsstest Du natürlich erstmal einen Interpreter dafür haben, wie Du ja auch WaveFront erstmal lesen musst (was zugegebenermaßen recht einfach ist)
Ich würde einfach die Objekte in Strukturen einlesen und diese dann rendern lassen. Vor dem Rendern kann man die Matrix ja entsprechend transformieren.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: Blender Animation mit OpenGL rendern
Blender-Animationen (wie ich sie vom gezeigt bekomme kenne) sind skeletal, d.h. mit "Bone"-Vertices.Xin hat geschrieben:Interessante Frage - geht das?Glocke hat geschrieben:folgendes Problem: Wie rendere ich eine Blender-Animation mit OpenGL unter Verwendung von C++?
Naja prinzipiell kümmert sich mein Grafiker um die Animationen, d.h. ich würde sie gerne aus einer Datei lesen. Das nächste wäre dann das Handhaben der Animation in C++. Bewege ich nur die Bone-Vertices und die (von der entsprechenden Bone-Vertex) abhängigen Vertices werden in Abhängigkeit zum Bone-Vertex gerendert? (z.B. indem ich so einem abhängigen Vertex einen Pointer auf den Bone-Vertex und einen Richtungsvektor - wie dieser zum Bone-Vertex liegt - gebe?)Xin hat geschrieben: Wo möchtest Du die Transformation denn beschreiben? Möchtest Du das in einem Textfile beschreiben oder in C++?
In einem Textfile müsstest Du natürlich erstmal einen Interpreter dafür haben, wie Du ja auch WaveFront erstmal lesen musst (was zugegebenermaßen recht einfach ist)
Ich würde einfach die Objekte in Strukturen einlesen und diese dann rendern lassen. Vor dem Rendern kann man die Matrix ja entsprechend transformieren.
LG Glocke
Rage - ein "modernes" Rogue-like (C++11, SFML)
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Blender Animation mit OpenGL rendern
Blender möchte ich mir auch mal halbwegs brauchbar aneignen.Glocke hat geschrieben:Blender-Animationen (wie ich sie vom gezeigt bekomme kenne) sind skeletal, d.h. mit "Bone"-Vertices.Xin hat geschrieben:Interessante Frage - geht das?Glocke hat geschrieben:folgendes Problem: Wie rendere ich eine Blender-Animation mit OpenGL unter Verwendung von C++?
Hier ist aber doch die Frage, wie diese Animationen gespeichert werden - und wie Du sie wieder einlesen kannst.
Naja prinzipiell kümmert sich mein Grafiker um die Animationen, d.h. ich würde sie gerne aus einer Datei lesen. Das nächste wäre dann das Handhaben der Animation in C++. Bewege ich nur die Bone-Vertices und die (von der entsprechenden Bone-Vertex) abhängigen Vertices werden in Abhängigkeit zum Bone-Vertex gerendert? (z.B. indem ich so einem abhängigen Vertex einen Pointer auf den Bone-Vertex und einen Richtungsvektor - wie dieser zum Bone-Vertex liegt - gebe?)[/quote]Xin hat geschrieben:Ich würde einfach die Objekte in Strukturen einlesen und diese dann rendern lassen. Vor dem Rendern kann man die Matrix ja entsprechend transformieren.
Ich bin da noch nciht sonderlich firm drin. Aber praktisch lädst Du doch erstmal nur ein Objekt ein und musst die Bone-Verbindungen speichern.
Also "Körper oben" an "Oberarm oben" und "Oberarm unten" an "Unterarm oben".
Rotiert der Körper, muss der an der Körperachse Oberarm mitrotieren. Da der Oberarm um die Körperachse rotiert, muss der Unterarm auch mit, sonst verlöre er ja die Verbindung.
Rotiert der Oberarm nun um die Verbindung "Körper<->Oberarm", muss der Unterarm entsprechend auch mit. Und so weiter.
Jeder "Bone" besitzt seine eigene Positionsmatrix, jeder Ast seine eigene Transformationsmatrix. Körper rotiert, der Ast "Arm" rotiert mit. Die Arm-Transformation muss also auf Ober- und Unterarm angewandt werden. Der Körper ist fertig => rendern. Dreht sich der Oberarm, kann man das einfach auf die Ast-Transformation draufpacken und die AstTransformation auf die Position vom Oberarm verrechnen. Oberarm rendern => Rotiert der Unterarm im Ellbogen, packt man das wieder auf den Ast drauf und die Ast-Trafo wieder auf die Position des Unterarms. Unterarm rendern.
Die Positionsmatrix der Bones enthält ihre Position im Vergleich zum übergeordneten Bone - also Unterarm unterhalb von Oberarm.
So stelle ich mir das vor - aber entwickelt ahbe ich das noch nicht.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: Blender Animation mit OpenGL rendern
So habe ich das prinzipiell auch im Kopf Wahrscheinlich muss ich "notfalls" die binären .blender-Dateien von meinem Programm einlesen lassen. Allerdings graut es mir davor geradeXin hat geschrieben:Ich bin da noch nciht sonderlich firm drin. Aber praktisch lädst Du doch erstmal nur ein Objekt ein und musst die Bone-Verbindungen speichern.
Also "Körper oben" an "Oberarm oben" und "Oberarm unten" an "Unterarm oben".
Rotiert der Körper, muss der an der Körperachse Oberarm mitrotieren. Da der Oberarm um die Körperachse rotiert, muss der Unterarm auch mit, sonst verlöre er ja die Verbindung.
Rotiert der Oberarm nun um die Verbindung "Körper<->Oberarm", muss der Unterarm entsprechend auch mit. Und so weiter.
Jeder "Bone" besitzt seine eigene Positionsmatrix, jeder Ast seine eigene Transformationsmatrix. Körper rotiert, der Ast "Arm" rotiert mit. Die Arm-Transformation muss also auf Ober- und Unterarm angewandt werden. Der Körper ist fertig => rendern. Dreht sich der Oberarm, kann man das einfach auf die Ast-Transformation draufpacken und die AstTransformation auf die Position vom Oberarm verrechnen. Oberarm rendern => Rotiert der Unterarm im Ellbogen, packt man das wieder auf den Ast drauf und die Ast-Trafo wieder auf die Position des Unterarms. Unterarm rendern.
Die Positionsmatrix der Bones enthält ihre Position im Vergleich zum übergeordneten Bone - also Unterarm unterhalb von Oberarm.
So stelle ich mir das vor - aber entwickelt ahbe ich das noch nicht.
Rage - ein "modernes" Rogue-like (C++11, SFML)
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Blender Animation mit OpenGL rendern
Das kann ich verstehen... *lach* ^^Glocke hat geschrieben:So habe ich das prinzipiell auch im Kopf Wahrscheinlich muss ich "notfalls" die binären .blender-Dateien von meinem Programm einlesen lassen. Allerdings graut es mir davor gerade
Vielleicht kann man da einen Python-Exporter in ein günstigeres Format schreiben!?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: Blender Animation mit OpenGL rendern
Prinzipiell sollte das gehen. Ich werd mich mal genauer schlau machenXin hat geschrieben:Vielleicht kann man da einen Python-Exporter in ein günstigeres Format schreiben!?
Rage - ein "modernes" Rogue-like (C++11, SFML)
Re: Blender Animation mit OpenGL rendern
Es gibt bereits Exporter (und auch Importer) für Unmengen an verschiedenen Formaten. Da muss man dann schauen was für Features man braucht bzw. auch ob man bereits Unterstützung für ein bestimmtes Format hat.
Man sollte übrigens zwischen Skeletal/Bone Animation und Animation von Objekten unterscheiden. Im ersten Fall hat man ein (unsichtbares Skelett und die einzelnen Knochen beeinflussen die Oberfläche (Haut) des Objekts, während bei zweiterem einzelnen Objekte (hierarchisch) transformiert werden (zb. Objekt Oberarm wird rotiert).
Man sollte übrigens zwischen Skeletal/Bone Animation und Animation von Objekten unterscheiden. Im ersten Fall hat man ein (unsichtbares Skelett und die einzelnen Knochen beeinflussen die Oberfläche (Haut) des Objekts, während bei zweiterem einzelnen Objekte (hierarchisch) transformiert werden (zb. Objekt Oberarm wird rotiert).
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at
Re: Blender Animation mit OpenGL rendern
Meinst du damit das http://en.wikipedia.org/wiki/Per-vertex_animation ?Kerli hat geschrieben:Man sollte übrigens zwischen Skeletal/Bone Animation und Animation von Objekten unterscheiden. Im ersten Fall hat man ein (unsichtbares Skelett und die einzelnen Knochen beeinflussen die Oberfläche (Haut) des Objekts, während bei zweiterem einzelnen Objekte (hierarchisch) transformiert werden (zb. Objekt Oberarm wird rotiert).
Dann könnte ich prinzipiell mit http://en.wikipedia.org/wiki/MD3_(file_format) arbeiten.Kerli hat geschrieben:Es gibt bereits Exporter (und auch Importer) für Unmengen an verschiedenen Formaten. Da muss man dann schauen was für Features man braucht bzw. auch ob man bereits Unterstützung für ein bestimmtes Format hat.
LG Glocke
Rage - ein "modernes" Rogue-like (C++11, SFML)
Re: Blender Animation mit OpenGL rendern
Hi,
ich denke mal du suchst dies hier ... Schau dir die Seite in Ruhe an, der Quellcode ist ebenfalls offen und damit kannst du dann denke ich weiterarbeiten. In der aktuellen Version kann OpenAsset mit .blend Files umgehen und alle relevanten Teile auslesen (Animationen - Bones, ...).
Wie gesagt - Quellcode studieren genauso wie du es wolltest - von der "Picke auf ..."
Gruß Fisherman
PS: Ansonsten gibt es noch die Blender Python API
ich denke mal du suchst dies hier ... Schau dir die Seite in Ruhe an, der Quellcode ist ebenfalls offen und damit kannst du dann denke ich weiterarbeiten. In der aktuellen Version kann OpenAsset mit .blend Files umgehen und alle relevanten Teile auslesen (Animationen - Bones, ...).
Wie gesagt - Quellcode studieren genauso wie du es wolltest - von der "Picke auf ..."
Gruß Fisherman
PS: Ansonsten gibt es noch die Blender Python API
There is no place like 127.0.0.1