Seite 2 von 3

Re: Blender Animation mit OpenGL rendern

Verfasst: Mi Jan 30, 2013 10:31 am
von Glocke
Fisherman hat geschrieben:PS: Ansonsten gibt es noch die Blender Python API
Ich glaube das einfachste wäre für den Export ein Python-Skript zu schreiben, das zunächst die Vertices und Faces im "Ruhezustand" exportiert (z.B. ähnlcih dem Waveobject-Format) und dann an die Datei noch verschiedene Keyframes für die Bewegung ranhängt. Das C++-Programm muss dann nur noch die Datei importieren (als ASCII-File kein großes Problem) und die Keyframes richtig rauslesen, so dass es dann bei der Animation (der Einfachheit halber) eine lineare Interpolation zwischen den Keyframes durchführt.

Die Keyframes würde ich z.B. so speichern: Jeder Vertex bekommt für jede Animation eine Liste von Koordinaten, an denen die Vertex (also effektiv die Polygon-Ecke) bei der entsprechenden Animation stehen soll. Dabei sind die Koordinaten nicht durchgängig sondern entsprechend der Keyframes. Dann kann ich ja anhand metrischen Abstands (aktuelle Koordinate, Keyframe-Koordinate) lineare Zwischenwerte ermitteln. Das sieht dann vllt. erstmal eckig aus, wäre für mich aber definitiv ein guter Anfang.

Wenn ich dann nicht zufrieden bin kann ich ja eine andere Interpolation durchführen oder mehr Keyframes nehmen.

Was sagt ihr?

LG Glocke

Re: Blender Animation mit OpenGL rendern

Verfasst: Mi Jan 30, 2013 12:00 pm
von Xin
Glocke hat geschrieben:
Fisherman hat geschrieben:Was sagt ihr?
Klingt sehr aufwendig...

Eine tolle Lösung habe ich aber auch nicht, da ich die interna von Blender überhaupt nicht kenne, ergo auch nicht weiß, welche Fragen man da stellen kann.

Re: Blender Animation mit OpenGL rendern

Verfasst: Mi Jan 30, 2013 12:04 pm
von Glocke
Xin hat geschrieben:Klingt sehr aufwendig...
Der Export in ein eigenes Format mit Keyframes?
oder das Verwalten der Keyframes samt Interpolation?
oder beides? :lol:

Re: Blender Animation mit OpenGL rendern

Verfasst: Mi Jan 30, 2013 12:07 pm
von Xin
Glocke hat geschrieben:
Xin hat geschrieben:Klingt sehr aufwendig...
Der Export in ein eigenes Format mit Keyframes?
oder das Verwalten der Keyframes samt Interpolation?
oder beides? :lol:
Die Kombination auf jeden Fall.

Ich würde mich fragen, ob man die Strukturen, in denen Blender die Animation speichert, nicht wegschreiben kann und dann interpretieren kann. Ein Blender-Player-Quasi. Und ich hätte wirklich gerne was dazu im Wiki stehen... ^^

Re: Blender Animation mit OpenGL rendern

Verfasst: Mi Jan 30, 2013 12:15 pm
von Glocke
Xin hat geschrieben:Ein Blender-Player-Quasi. Und ich hätte wirklich gerne was dazu im Wiki stehen... ^^
Also im Endeffekt direkt mit den .blend-Files zu arbeiten und die in Strukturen zu parsen, die sich um das Rendern und Verwalten der Animationen kümmert?

Re: Blender Animation mit OpenGL rendern

Verfasst: Mi Jan 30, 2013 12:32 pm
von Xin
Glocke hat geschrieben:
Xin hat geschrieben:Ein Blender-Player-Quasi. Und ich hätte wirklich gerne was dazu im Wiki stehen... ^^
Also im Endeffekt direkt mit den .blend-Files zu arbeiten und die in Strukturen zu parsen, die sich um das Rendern und Verwalten der Animationen kümmert?
Nicht unbedingt, wenn Du die .blend-Files nicht lesen magst, kannst Du Dir ja Dein eigenes Format ausdenken - und zum Beispiel als C++-Code speichern, dann kannst Du die Anim quasi mitkompilieren.

Eine Bewegung wäre entsprechend das Objekt und eine Liste von Bewegungsabläufen, also Transformationen und Zeitabschnitte, eventuell auch zeitliche Aspekte, zum Beispiel um Objekte beschleunigen zu können. Wenn eine Translation dann von t abhängt und in alle Dimensionen eine Beschleunigung liefern muss, dann wäre die Info halt nicht nur Translation( 0, 0, 5, 2000, Translation::Linear ), die das Objekt innerhalb von 2000ms um 5 Einheiten nach x verschiebt, sondern Translation( 0, 0, 0, 2000, Translation::Accellarate, 0, 0, -Accelleration::Gravity ), die ein Objekt mit der Startgeschwindigkeit 0 in alle Dimensionen für 2000ms mit der Erdanziehung nach -z beschleunigt.

Du musst allerdings die Möglichkeiten aufbauen, die Animationen dann auch abspielen zu können, also eine solche Translation abspielen zu können.

Re: Blender Animation mit OpenGL rendern

Verfasst: Mi Jan 30, 2013 12:44 pm
von Glocke
Xin hat geschrieben:Nicht unbedingt, wenn Du die .blend-Files nicht lesen magst, kannst Du Dir ja Dein eigenes Format ausdenken - und zum Beispiel als C++-Code speichern, dann kannst Du die Anim quasi mitkompilieren.
Das wäre jetzt nicht so das, wo ich hin will ^^
Xin hat geschrieben:Eine Bewegung wäre entsprechend das Objekt und eine Liste von Bewegungsabläufen, also Transformationen und Zeitabschnitte, eventuell auch zeitliche Aspekte, zum Beispiel um Objekte beschleunigen zu können. Wenn eine Translation dann von t abhängt und in alle Dimensionen eine Beschleunigung liefern muss, dann wäre die Info halt nicht nur Translation( 0, 0, 5, 2000, Translation::Linear ), die das Objekt innerhalb von 2000ms um 5 Einheiten nach x verschiebt, sondern Translation( 0, 0, 0, 2000, Translation::Accellarate, 0, 0, -Accelleration::Gravity ), die ein Objekt mit der Startgeschwindigkeit 0 in alle Dimensionen für 2000ms mit der Erdanziehung nach -z beschleunigt.

Du musst allerdings die Möglichkeiten aufbauen, die Animationen dann auch abspielen zu können, also eine solche Translation abspielen zu können.
Ich würde das vielleicht gar nicht so "kompliziert" machen wollen. Sachen wie Schwerkraft usw. hätte ich bei der Erstellung der Keyframes berücksichtigt. Wenn dann eine Figur ihren Arm fallen lässt, darf sie eben nicht kopfüber am Baum hängen (sieht komisch aus, wenn die Gravitation in Richtung Himmel wirkt).

Re: Blender Animation mit OpenGL rendern

Verfasst: Mi Jan 30, 2013 2:50 pm
von Fisherman
Ich bin ein Freund von "Keep it simple" ....

Schau dir mal die Blender Import/Export Möglichkeiten an. Insbesondere währe hier blend2java interessant, da hier eine XML generiert wird .....

Um die Sache einfach zu gestallten würde ich jeden Frame der Animation einzeln ausgeben lassen - somit wäre ein Teil von Blender berechnet worden (Physics etc.) und du müsstest "nur noch" das ganze mit OpenGL rendern ....

Ansonsten würde mir noch diese Methode einfallen [Pkt. 5]....

Re: Blender Animation mit OpenGL rendern

Verfasst: Mi Jan 30, 2013 3:18 pm
von Kerli
Ich würde auch zuerst einmal schauen ob es einen Exporter für ein geeignetes Format bereits gibt (Es gibt eh schon viel zu viele verschieden Formate^^). Was willst du denn eigentlich animieren? Ist es eher etwas mechanisches wo sich verschiedene Teile bewegen oder eher organisch wo sich auch Oberflächen/Körper verformen können (mehr als nur skalieren)?

Re: Blender Animation mit OpenGL rendern

Verfasst: Mi Jan 30, 2013 3:19 pm
von Glocke
Fisherman hat geschrieben:Ich bin ein Freund von "Keep it simple" ....
Und schon sind wir Freunde :lol:
Fisherman hat geschrieben:Um die Sache einfach zu gestallten würde ich jeden Frame der Animation einzeln ausgeben lassen - somit wäre ein Teil von Blender berechnet worden (Physics etc.) und du müsstest "nur noch" das ganze mit OpenGL rendern ....
Ist das laufzeittechnisch denn vertretbar? Irgendwie habe ich da Bauchschmerzen dabei, in Echtzeit alle Koordinaten der Vertices zyklisch zu ändern. Eine andere (speicherintensivere) Variante wäre vllt. für jeden Frame einen Mesh zu erstellen, die in einer Liste oder so aufzubewahren und je nach dem welchen Frame mal zeichnen will, sich den entsprechenden Mesh zu greifen und zu rendern. Da müsste ich dann nicht Vertex für Vertex erst neue Werte zuweisen und dann rendern. Imho sollte das schon eine Zeitersparnis sein - oder :?:
Kerli hat geschrieben:Ich würde auch zuerst einmal schauen ob es einen Exporter für ein geeignetes Format bereits gibt (Es gibt eh schon viel zu viele verschieden Formate^^). Was willst du denn eigentlich animieren? Ist es eher etwas mechanisches wo sich verschiedene Teile bewegen oder eher organisch wo sich auch Oberflächen/Körper verformen können (mehr als nur skalieren)?
Im Grunde "nur" Bewegungsanimationen (Art hoch, Arm runter usw.). Verformen soll sich da nichts zwingend.