Blender Animation mit OpenGL rendern

3D-Visualisierung mit der Open Graphics Library (OpenGL)
Glocke
Beiträge: 332
Registriert: Fr Okt 26, 2012 8:39 am

Re: Blender Animation mit OpenGL rendern

Beitrag von Glocke » Mi Jan 30, 2013 10:31 am

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

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Blender Animation mit OpenGL rendern

Beitrag von Xin » Mi Jan 30, 2013 12:00 pm

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.
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.

Glocke
Beiträge: 332
Registriert: Fr Okt 26, 2012 8:39 am

Re: Blender Animation mit OpenGL rendern

Beitrag von Glocke » Mi Jan 30, 2013 12:04 pm

Xin hat geschrieben:Klingt sehr aufwendig...
Der Export in ein eigenes Format mit Keyframes?
oder das Verwalten der Keyframes samt Interpolation?
oder beides? :lol:

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Blender Animation mit OpenGL rendern

Beitrag von Xin » Mi Jan 30, 2013 12:07 pm

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... ^^
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.

Glocke
Beiträge: 332
Registriert: Fr Okt 26, 2012 8:39 am

Re: Blender Animation mit OpenGL rendern

Beitrag von Glocke » Mi Jan 30, 2013 12:15 pm

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?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Blender Animation mit OpenGL rendern

Beitrag von Xin » Mi Jan 30, 2013 12:32 pm

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.
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.

Glocke
Beiträge: 332
Registriert: Fr Okt 26, 2012 8:39 am

Re: Blender Animation mit OpenGL rendern

Beitrag von Glocke » Mi Jan 30, 2013 12:44 pm

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).

Benutzeravatar
Fisherman
Beiträge: 84
Registriert: Mi Jun 06, 2012 4:53 am
Wohnort: 127.0.0.1

Re: Blender Animation mit OpenGL rendern

Beitrag von Fisherman » Mi Jan 30, 2013 2:50 pm

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]....
There is no place like 127.0.0.1

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Blender Animation mit OpenGL rendern

Beitrag von Kerli » Mi Jan 30, 2013 3:18 pm

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)?
"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

Glocke
Beiträge: 332
Registriert: Fr Okt 26, 2012 8:39 am

Re: Blender Animation mit OpenGL rendern

Beitrag von Glocke » Mi Jan 30, 2013 3:19 pm

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.

Antworten