Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 11:15

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Di Aug 26, 2008 15:31 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
Moin, Ich arbeite gerade an einer Model-class und bin soweit mit der organisation des Meshs fertig. Da ich die Modelle
animieren will hab ich mich mal schlau gemacht, was es da für Methoden gibt und bin auf by Vertex-animation und skeletal Animation gestoßen.
Da die Skeletal-animation nicht so speicher lastig und optisch "richtiger" erscheint hab ich mich dafür entschloßsen.
Hab das ersteinmal mit Matrizen versucht, aber nicht hinbekommen, also bin ich auf Quaternions ausgewichen und habe mit einzelnen Punkten
damit auch vernünftige Ergebnisse, allerdings weiß ich nicht, wie ich denn nun mein Skelett damit animieren soll. Schließlich kann ein Quaternion
ja nur 1 Achse haben, aber es würde ja sinn machen einen Bone um alle räumlichen Achsen drehen zu können. Gibt s da eine Möglichkeit alle
rotationen mit einem Quaternion auszuführen, oder wie stellt man das am besten an? Über die Keyframes mach ich mir erstma noch keine Gedanken,
will erstmal nur, dass ich mein Mesh bewegen kann.

grüße und schonmal guten Dank!

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 26, 2008 16:01 
Offline
DGL Member
Benutzeravatar

Registriert: So Jun 04, 2006 12:54
Beiträge: 263
Man kann jedes objekt eine belibige orientierung geben, indem man es um nur eine Achse in eine richtung dreht. (Funktioniert sogar in der Realwelt). Man kann rotationen mit Quaternionen durch multiplizieren kombinieren (wie mit matrizen). Alternativ kann man auch rotationsmatrizen in Quaternionen umwandeln.

Teile der Animation kann man auch dem Vertexshader überlassen:
http://lumina.sourceforge.net/Tutorials/Armature.html

_________________
Lumina plattform unabhängige GLSL IDE


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 27, 2008 13:34 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Zitat:
Hab das ersteinmal mit Matrizen versucht, aber nicht hinbekommen, also bin ich auf Quaternions ausgewichen und habe mit einzelnen Punkten damit auch vernünftige Ergebnisse

Du musst Da einen Fehler gemacht haben, denn ob Du Matrizen oder Quaternions nimmst sollte eigentlich egal sein

Zitat:
allerdings weiß ich nicht, wie ich denn nun mein Skelett damit animieren soll. Schließlich kann ein Quaternion ja nur 1 Achse haben

Ja, das stimmt, aber Du musst das Quaternion bei einer Animation ja ohnehin immer neu erzeugen, weil sich Winkel oder Achse oder beides doch jederzeit ändern kann

Zitat:
rotationen mit einem Quaternion auszuführen, oder wie stellt man das am besten an? Über die Keyframes mach ich mir erstma noch keine Gedanken, will erstmal nur, dass ich mein Mesh bewegen kann.

Wenn Du zunächst mal auf Keyframes verzichten willst - was ich verstehen kann - wäre es trotzdem wichtig, die Datenstrukur so aufzubauen, dass Du später leicht zu Keyframes überwechseln kannst.





Vorausschicken möchte ich, dass dieses Zeug für mich ein Hobby ist. Ich bin also kein professioneller Spieleprogrammierer. Damit Du weißt mit wem Du es zu tun hast.

Aus meiner bisherigen Erfahrung kann ich sagen, dass wenn man das Skelett als Baum von Gelenken aufbaut, ist die Implementierung verblüffend einfach. Was jetzt die Schwierigkeit beim Aufbau eines klugen 3d-Objekts ist, ist die Tatsache, dass Gelenke nur EINE Zutat zum Zeichnen sind, es gibt ja auch noch Material zu berücksichtigen. Zusätzlich - und an dem Problem kaue ich grade selber- wird irgendwann einmal das Problem schlagend, dass man ein bissel Physik einbauen will. Das sollte man immer im Hinterkopf behalten.

Die unbedingt nötigen Daten eines Gelenks sind folgende:
--------------------------------------------------------------------------
1.Position (ein 3D-Vektor)
2.Lokale Matrix (oder besser: Quaternion, weil weniger Daten)
3.Transformationsmatrix [TM] (ist notwendig fürs Zeichnen und wird bei jedem Frame neu erzeugt, muss eigentlich gar nicht gespeichert werden; könnte natürlich auch ein Quaternion sein)

Das wäre für Keyframes. Wenn Du das erstmal weglässt, könntest Du hinzufügen

4. RotationsAxis
5. RotationAngle

Und natürlich die Methoden

SetRotationAxis
SetRotationAngle

mit denen Du Achse und Winkel jeweils getrennt manipulieren kannst. Jede dieser Manipulationsmethoden erzeugt eine neue Lokale Matrix aus der aktuellen Rotationsachse und dem aktuellen Rotationswinkel des Gelenks.

WICHTG, BITTE JETZT GENAU LESEN:
Wenn Du es mit einem normalen Mesh zu tun hast, darfst Du die Rotation jetzt nicht einfach so auf die Vertices anwenden.
In der Fachliteratur steht dabei immer: "Man muss die Vertices vom Objektraum in den Gelenksraum bringen." Dahinter steckt nichts anderes, als dass alle Vertices, die diesem Gelenk zugeordnet sind mit dem Gelenks-Positions-Vektor in den Ursprung verschoben, dort gedreht und dann wieder zurückverschoben werden müssen.

Die obige Gelenks-Datenstruktur ist allgemeiner Natur, eignet sich z.B. auch für inverse Kinematik.

Die Transformationsmatrix wird erst vor dem Zeichnen erzeugt, dann läuft eine TREE-Rekursion den Baum von der Wurzel bis zu allen Finger/Zehenspitzen und jedes Gelenk erzeugt seine TM aus der Parent.TM und seiner lokalen Matrix. Das ist eine winzig kleine Methode, aber unheimlich mächtig und dabei total simpel.

Ein wenig mehr Hirnschmalz muss man in die Methode investieren, die den Baum beim Laden der Daten aufbaut.

Beim Zeichnen muss man dann die Gelenks-TM benutzen und anschließend alle Vertices des Gelenks hineinfüttern. Das ganze ist auch Shader-kompatibel. :wink:
Traude


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 27, 2008 15:19 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
wow, das nenn ich mal ausführlich! Werd mich dann mal demnächst zurück melden falls ich erfolge damit erziele

Danke nochmal

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 15 Queries | GZIP : On ]