Das SDK-Mesh-Format wird von Microsoft nicht für die Spiele-Erstellung empfohlen. Aber man kann es trotzdem sinnvoll für schnelles Prototyping verwenden.
Ich verwende das Format in meiner Engine. Das "Direct3D with XAML Marble Maze"-Beispiel enthält, soweit ich herausgefunden habe, die neueste Version ohne Direct3D-9, Direct3D10- und DXUT-Abhängigkeiten:
http://code.msdn.microsoft.com/Direct3D ... e-1d51a37b
Da die SDKMesh-Klasse für Windows 8-Store-Anwendungen und Spiele verwendet wird, musste ich den BasicLoader für die Texturen ersetzen durch die Direct3D 11-DDSTexturLoader-Funktionen: http://go.microsoft.com/fwlink/?LinkId=248926 und dann noch das Folgende in der SDKMesh-Klasse ersetzen:
Alt:
Code: Alles auswählen
DirectX::XMMATRIX * m_bindPoseFrameMatrices;[code][code]
DirectX::XMMATRIX * m_transformedFrameMatrices;
DirectX::XMMATRIX * m_worldPoseFrameMatrices;
[/code]
Neu:
Code: Alles auswählen
DirectX::XMFLOAT4X4 * m_bindPoseFrameMatrices;
DirectX::XMFLOAT4X4 * m_transformedFrameMatrices;
DirectX::XMFLOAT4X4 * m_worldPoseFrameMatrices;
aber die Animationen von Soldier.sdkmesh, Sebastian.sdkmesh und Lizard.sdkmesh werden nicht korrekt dargestellt. Da ich leider noch kein funktionierendes SDKMesh-Beispiel mit Animationen außer dem alten Direct3D10-Beispiel Skinning10 (verwendet aber DirectXMath und dafür Direct3D-9, Direct3D10- und DXUT-Abhängigkeiten) gefunden habe, weiß ich nicht, ob die fehlerhaften Animationen nun am Vertex-Shader meiner Engine oder an der SDKMesh-Klasse von Microsoft liegt.
Hat einer von Euch, Animationen mit dieser SDKMesh-Klasse schon getestet?
Die BindPose-Transformationen scheinen korrekt zu sein.
Mit der GetMeshInfluenceMatrix-Methode dieser Klasse habe ich schon experimentiert:
Wenn ich statt (stellt die Animationen komplett falsch dar):
Code: Alles auswählen
XMMATRIX Matrix_Knochen_Welt_Animiertes_SDK_Modell_mit_Schatten_aktuell = SDKMesh_animiert_aktuell.GetMeshInfluenceMatrix(Nummer_Animiertes_SDK_Modell_mit_Schatten_aktuell, Nummer_Einfluss_aktuell);
Code: Alles auswählen
XMMATRIX Matrix_Knochen_Welt_Animiertes_SDK_Modell_mit_Schatten_aktuell = SDKMesh_animiert_aktuell.GetMeshInfluenceMatrix(Nummer_Animiertes_SDK_Modell_mit_Schatten_aktuell, 0);
Unterschied dazu beim Skinning10-Demo von Microsoft: Kopf verhält sich genauso, der Rest vom Körper ist ebenfalls nicht animiert, aber der Rest wird nicht auf dem Kopf dargestellt.
Da ich vorhabe, in Zukunft ein kleines Direct3D11-Windows 8-Store-Spiel zu entwickeln, werde ich dann dafür die SDKMesh-Klasse für instanzierte, nicht animierte SDKMeshes verwenden und für Animationen dann den FBX-Animationscode im Visual Studio 3D Starter Kit. Für meine aktuelle, nicht Windows 8 Store-fähige-Engine, brauch ich aber SDKMesh-Animationen.
Gruß,
Daniel