Opengl Bone Animation

Hey Leute.
Ich wollte mal versuchen eine Animation zu programmieren, die mit Bones arbeitet
(Also zum Beispiel verschiedene Körperteile mit “Knochen” verbindet).
Ich habe mir zwar viel dazu durchgelesen und angeschaut, aber so ganz hab ich immer noch nicht
verstanden wie man an die Sache ran geht.

Die offizielle OpenGL Seite sagt auf jeden Fall, das man die Bones auf der Cpu animieren sollte.
Gut, so weit bin ich jetzt auch.
Ich hab mir folgendes gedacht: Die Klasse Bone besitzt die Attribute x, y, angle und length.
Mit angle und length lässt sich x2 und y2 berechnen, angle lässt sich leicht animieren.
Außerdem ist ein Bone direkt ein RenderObject bestehend aus einer Linie. Wenn ich angle also animiere,
rotiere ich gleichzeitig den / die / das Bone. Die Frage ist nur: was soll mit den Child Bones passieren?
Das überlege ich gerade. Aber ist der Ansatz komplett falsch, oder kann man das so in der Art machen?

Hm, ich glaube ich denke irgendwie falsch.
Letzten Endes muss man doch sogar in modernen Animationsprogrammen jedem Bone
eigene Keyframes geben… oder?

[quote=mymaksimus]edem Bone
eigene Keyframes geben[/quote]???
Was haben die Bones (also der BildInhalt) mit Keyframes (einer Eigenschaft des Kompressionsverfahrens) zu tun? Wie willst Du denn in einem Keyframe einzelne Teile des Inhaltes separieren?

bye
TT

@TT Keyframes bezieht sich nicht nur auf Bilder (im MPEG-Sinne) sondern auch auf z.B. zwei räumliche Anordnungen, zwischen denen interpoliert wird.

Ansonsten ist das Thema seeeeehr breit, man könnte tausdende von Papers zitieren, in denen es genau um diese Themen geht. Im einfachsten Fall, gaaaanz grob gesprochen, könnte man die Bones als eine Art „Szenegraph“ ansehen (genaugenommen ist es eine http://de.wikipedia.org/wiki/Kinematische_Kette ). Man fängt also irgendwo an einem Knoten an, z.B. bei der Hüfte, und hat da dann mehrere Bones, die dranhängen. Z.B. „rechter Oberschenkel“. Und daran hängt dann „linker Oberschenkel“, und daran dann „linker Fuß“. (Das Zungenbein zu modellieren wird dem geneigten Leser als Übung überlassen :D). Wenn der Oberschenkel um seinen Befestigungspunkt an der Hüfte rotiert wird, wird die Bewegung auf seinen Endpunkt übertragen (dort, wo der Unterschenkel dranhängt). Der Unterschenkel verändert dadurch seine Position und seine Räumliche Ausrichtung, aber seine Lage relativ zum Oberschenkel bleibt konstant.
Bei obigem Wiki-Link findet man recht schnell die entsprechenden Formeln, aber … im ersten Moment sieht das sehr kompliziert aus. Nach einer Weile denkt man, dass es komplizierter aussieht, als es ist. Und wieder eine Weile später merkt man, dass es vieeeel komplizierter ist, als es eigentlich aussah :smiley: Aber wenn es wirklich nur um die räumliche Anordnung geht (und einen irgendwelche Bewegungsgeschwindigkeiten usw. nicht interessieren) kann man es wirklich als eine recht einfache Kette wie „KnotenMitTransformationsmatrix -----Bone----> KnotenMitTransformationsmatrix -----Bone----> Knoten“ ansehen.

Hm… ich schau mir das mal an…
naja… man kann es dann doch auch faken, und einfach so aussehen
lassen als ob…

ich versteh deine vereinfachte version irgendwie nicht:

Knoten - das sind doch dann Joints, oder nicht?
Will ich ja nicht… ich will eigentlich nur Bones… (Ich hab irgendwo gelesen dass man es sowohl mit als auch ohne joints machen kann…)
KnotenMitTransformationsmatrix ist dann was in deiner Version? Vllt auf mein Beispiel einer implementierung bezogen?

Ja, mit den Knoten sind “Joints” gemeint - aber … wie sollen sich die Bones ohne Joints denn bewegen?

durch rotation…?
Ich bin gut dabei, ich poste nachher mal beispielcode

Ja, rotation worum? Um ihren Anfang. Und dann ist ihr Anfang ein Joint. (Die Frage, ob an einem Joint dann mal mehrere Bones hängen (die Hüfte, mal wieder) ist dann schon fast sekundär, aber schon damit verbunden (sic!))

Sieht nach Spaß und viel Arbeitsaufwand aus