[D3D11] Neueste SDKMesh-Klasse mit fehlerhaften Animationen?

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
NoFake3D
Beiträge: 59
Registriert: 27.12.2012, 13:12

[D3D11] Neueste SDKMesh-Klasse mit fehlerhaften Animationen?

Beitrag von NoFake3D »

Hi,

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]
[/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;
Beim Testen dieser Klasse in meiner Direct3D11-Engine (ist keine Direct3D11-Windows-Store-Engine) funktionieren die instanzierten SDKMeshes (*.sdkmesh) ohne Probleme,
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);
folgendes zum Testen ändere:

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);
wird der Kopf richtig animiert dargestellt. Der Rest vom Körper wird auf dem Kopf gespiegelt und nicht animiert dargestellt.

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
Antworten