zastosować niehierarchiczne transformacje do hierarchicznego szkieletu?

Używam Blender3D, ale odpowiedź może nie dotyczyć wyłącznie API.

Mam kilka macierzy, które muszę przypisać do PoseBones. Wynikająca z tego pozycja wygląda dobrze, gdy nie ma hierarchii kości (rodzicielstwo) i jest zawalona, ​​gdy jest.

Przesłałem archiwum z przykładową mieszanką modeli sfałszowanych, importera animacji tekstu i pliku animacji testowej tutaj:http://www.2shared.com/file/5qUjmnIs/sample_files.html
Zaimportuj animację, wybierając Armaturę i uruchamiając importera w pliku „sba”. Zrób to dla obu armatur.

W ten sposób przypisuję pozy prawdziwemu (złożonemu) importerowi:

matrix_bases = ... # matrix from file
animation_matrix = matrix_basis * pose.bones['mybone'].matrix.copy()
pose.bones[bonename].matrix = animation_matrix

Jeśli przejdę do trybu edycji, zaznacz wszystkie kości i naciśnij kombinację klawiszy Alt + P, aby cofnąć rodzicielstwo.

Dokumentacja API mówi, że PoseBone.matrix znajduje się w „przestrzeni obiektowej”, ale wydaje mi się, że z tych testów wynika, że ​​są one relatywne do kości macierzystych.

Ostateczna matryca 4x4 po zastosowaniu ograniczeń i sterowników (obiekt przestrzeń)

Próbowałem zrobić coś takiego:

matrix_basis = ... # matrix from file
animation_matrix = matrix_basis * (pose.bones['mybone'].matrix.copy()  * pose.bones[bonename].bone.parent.matrix_local.copy().inverted())
pose.bones[bonename].matrix = animation_matrix

Ale wygląda gorzej. Eksperymentowałem z kolejnością operacji, bez szczęścia ze wszystkimi.

Dla przypomnienia, w starym API 2.4 działało to jak urok:

matrix_basis = ... # matrix from file
animation_matrix = armature.bones['mybone'].matrix['ARMATURESPACE'].copy() * matrix_basis
pose.bones[bonename].poseMatrix = animation_matrix

pose.update()

Link do interfejsu API Blendera:

http://www.blender.org/documentation/blender_python_api_2_63_17/bpy.types.BlendData.html#bpy.types.BlendData

http://www.blender.org/documentation/blender_python_api_2_63_17/bpy.types.PoseBone.html#bpy.types.PoseBone

questionAnswers(1)

yourAnswerToTheQuestion