def traverse_animation_curves(fbx_scene, fbx_node, fbx_layer, egg_parent): for i in range(fbx_node.GetChildCount()): fbx_child = fbx_node.GetChild(i) if fbx_child.GetSkeleton() is None: continue xform_new = EggXfmSAnim("xform") xform_new.setOrder(EggXfmSAnim.getStandardOrder()) # xform_new.setOrder("shprt") xform_new.setFps(30) for transform in get_transforms(fbx_child, fbx_layer): xform_new.addData(transform) egg_table = EggTable(fbx_child.GetName()) egg_table.addChild(xform_new) egg_parent.addChild(egg_table) traverse_animation_curves(fbx_scene, fbx_child, fbx_layer, egg_table)
def get_transforms(fbx_node, fbx_layer): rotation_order = fbx_node.GetRotationOrder(fbx.FbxNode.eSourcePivot) translation_curve = fbx_node.LclTranslation.GetCurve(fbx_layer, True) rotation_curve = fbx_node.LclRotation.GetCurve(fbx_layer, True) scaling_curve = fbx_node.LclScaling.GetCurve(fbx_layer, True) translation_count = translation_curve.KeyGetCount() rotation_count = rotation_curve.KeyGetCount() scaling_count = scaling_curve.KeyGetCount() key_count = max(translation_count, rotation_count, scaling_count) # order = convert_fbx_rotation_order[rotation_order] order = EggXfmSAnim.getStandardOrder() # srpht # order = "shprt" for key_index in range(key_count): key_time = fbx.FbxTime() key_time.SetFrame(key_index) translation = convert_fbx_vector4(fbx_node.EvaluateLocalTranslation(key_time)) rotation = convert_fbx_vector4(fbx_node.EvaluateLocalRotation(key_time)) scaling = convert_fbx_vector4(fbx_node.EvaluateLocalScaling(key_time)) rotation = normalize_rotation_order(rotation_order, rotation) # transform = fbx_node.EvaluateLocalTransform(key_time) # translation = convert_fbx_vector4(transform.GetT()) # rotation = convert_fbx_vector4(transform.GetR()) # scaling = convert_fbx_vector4(transform.GetS()) shear = VBase3D(0, 0, 0) mat = Mat4D() EggXfmSAnim.composeWithOrder(mat, scaling, shear, rotation, translation, order, CSYupRight) # TODO: read coordinate system from fbx yield mat