Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

29.01.2009, 18:30

Charakter Animation

Hallo, ich hätte ne Frage zur grundlegenden Vorgehensweise bei der Charakteranimation. Nehmen wir mal an ich habe ein 3D Modell eines Charakters in einem 3D-Modellier Programm erstellt. Ich möchte gerne Bone Animation nutzen.
Meine Frage ist nun, erstelle ich die Animationen direkt im 3D Programm? Gibt es also die Möglichkeit, dass die Bewegung der Bones und des Skins beim exportieren mit exportiert werden und ich die Animation dann in der Programmiersprache einfach abspielen kann? Oder erstelle ich die Animation direkt im Quellcode in dem ich jeden Bone einzeln bewege?
Ich hoffe es ist verständlich was ich wissen will. Das mag für die meisten wahrscheinlich selbstverständlich sein, ich habe aber bisher nirgendwo etwas gefunden wo das einfach erklärt wird.

Jevermeister

Treue Seele

Beiträge: 130

Wohnort: Bremerhaven

Beruf: Student

  • Private Nachricht senden

2

29.01.2009, 19:27

Da findest du relativ gute Infos, hab ich per Google gefunden.
http://norsetto.890m.com/skeleton.php

Die Half-Life Models verwenden das zum Beispiel.
Du speicherst die Animation mit einer Bezeichnung im Model und schreibst dann eine Methode, die die Bewegungen der Knochen aus der Datei einliest und dann ausführt.
Diese Funktionalität musst du natürlich einmal programmieren.

3

29.01.2009, 19:31

Link guck ich mir gleich an aber danke schonmal für die Information.

4

29.01.2009, 19:57

Soweit ich weiß, laufen die Animationen per Keys.
Beispiel:

Du erstellst eine Animation "Laufen". Nun hast du die Bones und animierst
beispielsweise ein oder zwei Schritte wie der Charakter läufst, setzt
aber nach jeder Bewegung einen Key (wie das geht, ist bei jedem Programm unterschiedlich).
Diese Keys musst du nun auslesen und dementsprechend den Charakter
animieren. Natürlich musst du die Datei dann in ein Format exportieren,
dass die Animation unterstützt (z.B. md2).
MfG Shiver!

„Ideen sind nur Ausgangspunkte. Um zu wissen, was man zeichnen will, muss man zu zeichnen anfangen.“ Pablo Picasso

Ibot Development - Mein Weg zum eigenen 2D RPG

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

5

29.01.2009, 20:47

Zitat

Meine Frage ist nun, erstelle ich die Animationen direkt im 3D Programm?


nein in der regel mit deiner 3D-Modellierungssoftware. man kann z. b. idle motions generieren, aber das is schon was exquisites!

Zitat

Gibt es also die Möglichkeit, dass die Bewegung der Bones und des Skins beim exportieren mit exportiert werden und ich die Animation dann in der Programmiersprache einfach abspielen kann?


ja kannst du das hängt von format in das du es exportierst ab und natürlich ob das jeweilige plugin das auch beherrscht zu exportieren. eine programmiersprache kann sowas nicht abspielen, aber eine engine wie etwa ogre, irrlict und wie sie alle heissen können.ansonsten selber tippeln.

Zitat

Oder erstelle ich die Animation direkt im Quellcode in dem ich jeden Bone einzeln bewege?


siehe erste quote-antwort und dazu: ja du bewegst natürlich jede bone einzeln wenn nich wie im quote 2 du eine engine verwendest. anders gehts leider nicht ;)

ich hab nen bissl das gefühl du bist ziemlich neu auf dem gebiet das is schon etwas schwieriger, ich empfehle dir sowas später zu machen ist nicht ganz einfach :)

6

29.01.2009, 20:59

Kannst dir ja mal das Beispielprogramm SkinnedMesh aus dem DirectX SDK anschauen.
Skinned Mesh z.B. im X-Modellformat (Microsoft) ist "relativ" leicht zu implementieren.
fka tm

7

29.01.2009, 23:52

Die Theorie hinter Bones Animationen ist schon nicht trivial.
Also, du hast ein hierarchisches Skelett (bewegt man den Oberarm, bewegt man den Unterarm mit, umgekehrt nicht). Dann besteht eine Animation aus einzelnen Keys, also welcher Knochen zu welchem Zeitpunkt welche Rotation, Skalation und Position hat (Rotation ist da noch am wichtigsten).
Zu jedem Zeitpunkt musst du dann die Keys interpolieren, um die akutelle Rotation, Skalation und Position zu bekommen, für Rotationen braucht man meist noch Quaternions.
Diese Transformationen packst du in Matrizen, womit du das hierarchische Modell schön abbilden kannst (erst für jeden Knochen eine Matrix erstellen, dann die nacheinander passend Multiplizieren, das jede Matrix von einem Knochen alle Transformationen der höheren Knochen beinhaltet.

Dann musst du entsprechend der Knochen die Vertices transformieren, willst du weiche übergänge, haben die meist noch ein Boneweight, also wie stark sie von welchem Bone beeinflusst werden. Die Transformation kannst du entweder per CPU (nicht so gut), Fixed Function Pipelin oder Shader machen.

Du musst also schon eine Menge Ahnung von linearer Algebra haben um das alles umsetzen zu können. Und da war jetzt noch nichtmal das Problem darin, die Datei mit der Animation zu laden, denn wie man sich denken kann, sind die auch nicht wirklich simpel aufgebaut.
Lieber dumm fragen, als dumm bleiben!

8

30.01.2009, 01:54

Das das kein leichtes Thema ist ist mir schon klar.
Lineare Algebra.. Naja, hatte ich mal ein Semester inner Uni. 'N bisschen ist da hängen geblieben^^ Ich hab sogar noch 'n Buch zum Thema Lineare Algebra und diskrete Mathematik hier rumstehen.
Meine Frage wäre damit nun aber soweit erstmal beantwortet. Danke für eure Hilfe.

9

02.02.2009, 20:13

Genau das sage ich jedem: directX zu programmieren (oder opengl) ist nicht einfach.

warum wäre es?? dann würden alle Spiele programmieren.

wo man für einen korrekten, anständigen init 100 oder mehr Zeilen braucht. anstatt z. B. Microsoft eine Funktion schreiben würde, wie InitDirectX(SDK, Device), und basta. Rückgabewert ist 1, wenn es gelungen ist, sonst ein error Objekt. Aber nein. Wie viele von euch können z. B. directx9 AUSWENDIG initialisieren?? hwnd, lptr..., usw. Überhaupt diese Bezeichnungen an sich. Man muss sie fast buchstabieren, um sie korrekt zu lesen. Hat man bei Microsoft daran nicht gedacht??

Zum Thema Animation. Warum kann man hier keine EINFACHE Methode verwenden, wie PlayAnimation, StopAnimation, EndAnimation, usw. Warum lässt man nicht den Computer die Berechnung machen??

Überhaupt warum c++?? Es wäre viel-viel besser gewesen, wenn die Grundsprache der Spieleprogrammierung Basic-orientiert wäre. Natürlich ist c++ die schnellste, aber ich frage mich, hätte man z. b. eine Basic-Sprache nicht genau so schnell schreiben können?? Natürlich hätten sie das. Weil es Unsinn ist, dass es nicht geht. Aber sie wollten es nicht.

Wenn man ein Programm in c++ liest, dann fragt man sich: was lese ich denn?? Sind das hieroglyphische Zeichen oder ein Programm?? Man hat das Gefühl, dass c++ erfunden wurde, um in Text immer kürzere Programme zu schreiben. Z. B. warum || anstatt ein einfaches "or", oder && statt "and", oder diese Blöde Syntaxen mit dem %-Zeichen.

Ich würde gerne Spiele programmieren. Ich würde systematisch vorgehen. Z. B. zuerst directx initialisieren, dann ein Bild anzeigen lassen, dann in verschiedenen Auflösungen, kombiniert mit directinput (Auflösungen durch Tastendruck, oder Maus ändern). Dann ein Modell laden, dann texturieren, dann AA einstellen, oder AF. Dann ein *.bik Video aus irgendeinem Spiel abspielen. Aber das alles geht nicht. Weil das nicht einfach ist. Schade, dass directx nicht basic-orientiert ist.

Schöne Grüsse aus UNGARN.

Anonymous

unregistriert

10

02.02.2009, 20:17

Zitat

Wie viele von euch können z. B. directx9 AUSWENDIG initialisieren??

Soso, du versuchst dein Code also auswendig zu lernen...

Werbeanzeige