Armature object animations export.

This commit is contained in:
2011-08-21 15:47:21 +00:00
parent 4f75566672
commit 6b99cd05aa
4 changed files with 26 additions and 11 deletions

View File

@@ -63,6 +63,8 @@ void AnimationExporter::exportAnimations(Scene *sce)
//Export transform animations
if(ob->adt && ob->adt->action)
{
fcu = (FCurve*)ob->adt->action->curves.first;
//transform matrix export for bones are temporarily disabled here.
if ( ob->type == OB_ARMATURE )
{
@@ -71,19 +73,20 @@ void AnimationExporter::exportAnimations(Scene *sce)
for (Bone *bone = (Bone*)arm->bonebase.first; bone; bone = bone->next)
write_bone_animation_matrix(ob, bone);
transformName = fcu->rna_path;
}
else {
fcu = (FCurve*)ob->adt->action->curves.first;
else
transformName = extract_transform_name( fcu->rna_path );
while (fcu) {
transformName = extract_transform_name( fcu->rna_path );
transformName = extract_transform_name( fcu->rna_path );
if ((!strcmp(transformName, "location") || !strcmp(transformName, "scale")) ||
(!strcmp(transformName, "rotation_euler") && ob->rotmode == ROT_MODE_EUL)||
(!strcmp(transformName, "rotation_quaternion")))
dae_animation(ob ,fcu, transformName, false);
fcu = fcu->next;
}
}
}
//Export Lamp parameter animations

View File

@@ -167,7 +167,6 @@ std::string ArmatureExporter::get_joint_sid(Bone *bone, Object *ob_arm)
// parent_mat is armature-space
void ArmatureExporter::add_bone_node(Bone *bone, Object *ob_arm)
{
/*if((bone->flag & BONE_NO_DEFORM) == 0 ){*/
std::string node_id = get_joint_id(bone, ob_arm);
std::string node_name = std::string(bone->name);
std::string node_sid = get_joint_sid(bone, ob_arm);
@@ -189,8 +188,7 @@ void ArmatureExporter::add_bone_node(Bone *bone, Object *ob_arm)
for (Bone *child = (Bone*)bone->childbase.first; child; child = child->next) {
add_bone_node(child, ob_arm);
}
node.end();
node.end();
//}
}

View File

@@ -82,6 +82,10 @@ JointData *ArmatureImporter::get_joint_data(COLLADAFW::Node *node);
void ArmatureImporter::create_unskinned_bone( COLLADAFW::Node *node, EditBone *parent, int totchild,
float parent_mat[][4], Object * ob_arm)
{
std::vector<COLLADAFW::Node*>::iterator it;
it = std::find(finished_joints.begin(),finished_joints.end(),node);
if ( it != finished_joints.end()) return;
float mat[4][4];
float obmat[4][4];
@@ -151,11 +155,18 @@ void ArmatureImporter::create_unskinned_bone( COLLADAFW::Node *node, EditBone *p
add_leaf_bone(mat, bone, node);
}
finished_joints.push_back(node);
}
void ArmatureImporter::create_bone(SkinInfo& skin, COLLADAFW::Node *node, EditBone *parent, int totchild,
float parent_mat[][4], bArmature *arm)
{
//Checking if bone is already made.
std::vector<COLLADAFW::Node*>::iterator it;
it = std::find(finished_joints.begin(),finished_joints.end(),node);
if ( it != finished_joints.end()) return;
float joint_inv_bind_mat[4][4];
// JointData* jd = get_joint_data(node);
@@ -183,10 +194,10 @@ void ArmatureImporter::create_bone(SkinInfo& skin, COLLADAFW::Node *node, EditBo
else
copy_m4_m4(mat, obmat);
/*float loc[3], size[3], rot[3][3] , angle;
float loc[3], size[3], rot[3][3] , angle;
mat4_to_loc_rot_size( loc, rot, size, obmat);
mat3_to_vec_roll(rot, NULL, &angle );
bone->roll=angle;*/
bone->roll=angle;
}
@@ -257,6 +268,8 @@ void ArmatureImporter::create_bone(SkinInfo& skin, COLLADAFW::Node *node, EditBo
if (!children.getCount() || children.getCount() > 1) {
add_leaf_bone(mat, bone , node);
}
finished_joints.push_back(node);
}
void ArmatureImporter::add_leaf_bone(float mat[][4], EditBone *bone, COLLADAFW::Node * node)
@@ -659,7 +672,7 @@ void ArmatureImporter::make_armatures(bContext *C)
}
//for bones without skins
//create_armature_bones();
create_armature_bones();
}
#if 0

View File

@@ -89,6 +89,7 @@ private:
std::map<COLLADAFW::UniqueId, COLLADAFW::UniqueId> geom_uid_by_controller_uid;
std::map<COLLADAFW::UniqueId, COLLADAFW::Node*> joint_by_uid; // contains all joints
std::vector<COLLADAFW::Node*> root_joints;
std::vector<COLLADAFW::Node*> finished_joints;
std::map<COLLADAFW::UniqueId, Object*> joint_parent_map;
std::map<COLLADAFW::UniqueId, Object*> unskinned_armature_map;