XNA Game Studio - Eure Einschätzung

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Benutzeravatar
Richard Schubert
Moderator
Beiträge: 106
Registriert: 27.02.2009, 08:44
Wohnort: Hohen Neuendorf (b. Berlin)
Kontaktdaten:

Re: XNA Game Studio - Eure Einschätzung

Beitrag von Richard Schubert »

Matze hat geschrieben:
Richard Schubert hat geschrieben:Sobald du allerdings mehrere Animationen miteinander verblenden willst, musst du selbst Hand anlegen.
Was meinst Du damit? Kannst Du dazu mal ein Beispiel geben?
Hier kann man schön sehen, wie man eine einfache Boneanimation mit XNA abspielt. Sobald du aber diese Laufanimation mit einer anderen zusammen abspielen willst, z.b. einen Arm heben, dann musst du das zusammenblenden dieser beiden Animation mit eigenem Code durchführen. Die von KampfGremlin genannten Frameworks helfen vielleicht dabei, habe mich selbst noch nicht viel damit beschäftigt.
Produktivität über Performance - XNA Creators Club
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4260
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: XNA Game Studio - Eure Einschätzung

Beitrag von Chromanoid »

Soweit ich weiss muss man eigentlich alles bis auf das Laden der Bones/Gewichtungen selbst machen, oder? Jedenfalls war das bei mir so... Ich hab mir dann einfach genau das Beispiel, was du da gepostet hast, geschnappt und in mein "minispielprototyp" eingebunden :)... Ich dachte halt, dass es da irgendwie vielleicht noch was XNA Internes besseres gäbe... :)
Ansonsten kann ich den Code dort auch nur empfehlen...

Falls es wen interessiert, wie dass dann mit einer Animation mit dem Sample-Code abläuft hier mal ein bisschen grober Beispiel-Code (sorry für die komische MemberVariablen-Notation):
Wenn man die Animationen mit Bezeichnern versieht, kann man das dann einfach so laden und abspielen...
private IDictionary<string,AnimationClip> m_xAnimationClips;
//...Beim Laden des Modells
SkinningData skinningData = renderModel.Tag as SkinningData; //renderModel ist vom Typ Model
if (skinningData == null)
throw new InvalidOperationException("This model does not contain a SkinningData tag.");
m_xAnimationPlayer = new AnimationPlayer(skinningData);
m_xAnimationClips = skinningData.AnimationClips;
//...Zum Starten einer Animation
m_xAnimationPlayer.StartClip(m_xAnimationClips["idle"]); //"idle" ist hier der Animationsbezeichner
//...Beim Update für die Animation
m_xAnimationPlayer.Update(time, true, worldMatrix);
//...Beim Malen des Models:
foreach (ModelMesh mesh in RenderModel.Meshes)
{
m_xProjMatrixHelper.SetValue(in_xProjMatrix); //Die Helper Objekte sind Shader-Parameter
m_xViewMatrixHelper.SetValue(in_xViewMatrix);
m_xWorldMatrixHelper.SetValue(m_xTransforms[mesh.ParentBone.Index]*in_xWorldMatrix);
m_xBonesHelper.SetValue(m_xAnimationPlayer.GetSkinTransforms());
mesh.Draw();
}
Wenn man jetzt mehrere Animationen gleichzeitig abspielen will, muss man nach meinem Verständnis einfach in der AnimationPlayer Klasse die Matrizen für die Animationen miteinander multiplizieren bzw. interpolieren... Btw: Pro eigenständig animiertes Objekt braucht man einen AnimationPlayer...
Antworten