Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSukhitha Prabhath Jayathilake <pr.jayathilake@gmail.com>2011-08-21 19:47:21 +0400
committerSukhitha Prabhath Jayathilake <pr.jayathilake@gmail.com>2011-08-21 19:47:21 +0400
commit6b99cd05aa5528a931e391c5d78278aeaa6dd861 (patch)
tree4a630c1964f61032429c7e13c2cc52c888255bb6 /source/blender/collada
parent4f75566672b06931556888b0b300533c110d6e3d (diff)
Armature object animations export.
Diffstat (limited to 'source/blender/collada')
-rw-r--r--source/blender/collada/AnimationExporter.cpp13
-rw-r--r--source/blender/collada/ArmatureExporter.cpp4
-rw-r--r--source/blender/collada/ArmatureImporter.cpp19
-rw-r--r--source/blender/collada/ArmatureImporter.h1
4 files changed, 26 insertions, 11 deletions
diff --git a/source/blender/collada/AnimationExporter.cpp b/source/blender/collada/AnimationExporter.cpp
index 014c13d8986..2f074992076 100644
--- a/source/blender/collada/AnimationExporter.cpp
+++ b/source/blender/collada/AnimationExporter.cpp
@@ -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
diff --git a/source/blender/collada/ArmatureExporter.cpp b/source/blender/collada/ArmatureExporter.cpp
index bd7aea16b29..92d06bb639f 100644
--- a/source/blender/collada/ArmatureExporter.cpp
+++ b/source/blender/collada/ArmatureExporter.cpp
@@ -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();
//}
}
diff --git a/source/blender/collada/ArmatureImporter.cpp b/source/blender/collada/ArmatureImporter.cpp
index 67828fb967d..1e7879b352f 100644
--- a/source/blender/collada/ArmatureImporter.cpp
+++ b/source/blender/collada/ArmatureImporter.cpp
@@ -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
diff --git a/source/blender/collada/ArmatureImporter.h b/source/blender/collada/ArmatureImporter.h
index 92d070ef575..4f4aed210f2 100644
--- a/source/blender/collada/ArmatureImporter.h
+++ b/source/blender/collada/ArmatureImporter.h
@@ -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;