From caef67eb923e37accdbb0664f90c99fe928406c2 Mon Sep 17 00:00:00 2001 From: Sukhitha Prabhath Jayathilake Date: Tue, 28 Jun 2011 19:30:00 +0000 Subject: Set Edit bone roll on Armature Import. + Light->Color Sid for testing. --- source/blender/collada/AnimationImporter.cpp | 31 +--------------------------- source/blender/collada/ArmatureExporter.cpp | 7 ++++++- source/blender/collada/ArmatureImporter.cpp | 19 +++++++++++++---- source/blender/collada/CameraExporter.cpp | 2 +- source/blender/collada/LightExporter.cpp | 2 +- 5 files changed, 24 insertions(+), 37 deletions(-) (limited to 'source/blender') diff --git a/source/blender/collada/AnimationImporter.cpp b/source/blender/collada/AnimationImporter.cpp index 3b33ad0dee6..bb11f815b40 100644 --- a/source/blender/collada/AnimationImporter.cpp +++ b/source/blender/collada/AnimationImporter.cpp @@ -776,36 +776,7 @@ void AnimationImporter::translate_Animations_NEW ( COLLADAFW::Node * node , ob->rotmode = ROT_MODE_EUL; } } - // if (is_joint) - //{ - // float mat[4][4]; - // float obmat[4][4]; - - // // object-space - // get_node_mat(obmat, node, NULL, NULL); - // bPoseChannel *chan = get_pose_channel(ob->pose, bone_name); - // - // bArmature * arm = (bArmature *) ob->data; - // - // Bone *cur = get_named_bone( arm , bone_name ); - - // if (cur->parent){ - // COLLADAFW::Node * parent = armature_importer->joint_parent_map.find(node->getUniqueId()); - // float[4][4] parent_mat; - // get_node_mat ( parent_mat, parent, NULL, NULL ); - // mul_m4_m4m4(mat, obmat, parent_mat); - // bPoseChannel *parchan = get_pose_channel(ob->pose, cur->parent->name); - // if ( parchan && chan) - // mul_m4_m4m4(pchan->pose_mat, mat , parchan->pose_mat); - // } - // else { - // copy_m4_m4(mat, obmat); - // float invObmat[4][4]; - // invert_m4_m4(invObmat, ob->obmat); - // if(pchan) - // mul_m4_m4m4(pchan->pose_mat, mat, invObmat); - // } - //} + } } diff --git a/source/blender/collada/ArmatureExporter.cpp b/source/blender/collada/ArmatureExporter.cpp index 90c3cfbb001..b98e750aa86 100644 --- a/source/blender/collada/ArmatureExporter.cpp +++ b/source/blender/collada/ArmatureExporter.cpp @@ -351,12 +351,17 @@ std::string ArmatureExporter::add_inv_bind_mats_source(Object *ob_arm, ListBase bPoseChannel *pchan = get_pose_channel(pose, def->name); + float pose_mat[4][4]; float mat[4][4]; float world[4][4]; float inv_bind_mat[4][4]; + // pose_mat is the same as pchan->pose_mat, but without the rotation + unit_m4(pose_mat); + translate_m4(pose_mat, pchan->pose_head[0], pchan->pose_head[1], pchan->pose_head[2]); + // make world-space matrix, pose_mat is armature-space - mul_m4_m4m4(world, pchan->pose_mat, ob_arm->obmat); + mul_m4_m4m4(world, pose_mat, ob_arm->obmat); invert_m4_m4(mat, world); converter.mat4_to_dae(inv_bind_mat, mat); diff --git a/source/blender/collada/ArmatureImporter.cpp b/source/blender/collada/ArmatureImporter.cpp index ad8ad690ef5..4e330738026 100644 --- a/source/blender/collada/ArmatureImporter.cpp +++ b/source/blender/collada/ArmatureImporter.cpp @@ -96,13 +96,17 @@ void ArmatureImporter::create_unskinned_bone( COLLADAFW::Node *node, EditBone *p bPoseChannel *pchan = get_pose_channel(ob_arm->pose, (char*)bc_get_joint_name(node)); if (parent) bone->parent = parent; - + float ax[3]; + float angle = NULL; + // get world-space if (parent){ mul_m4_m4m4(mat, obmat, parent_mat); bPoseChannel *parchan = get_pose_channel(ob_arm->pose, parent->name); if ( parchan && pchan) mul_m4_m4m4(pchan->pose_mat, mat , parchan->pose_mat); + mat4_to_axis_angle(ax,&angle,mat); + bone->roll = angle; } else { copy_m4_m4(mat, obmat); @@ -110,6 +114,8 @@ void ArmatureImporter::create_unskinned_bone( COLLADAFW::Node *node, EditBone *p invert_m4_m4(invObmat, ob_arm->obmat); if(pchan) mul_m4_m4m4(pchan->pose_mat, mat, invObmat); + mat4_to_axis_angle(ax,&angle,mat); + bone->roll = angle; } @@ -545,7 +551,8 @@ void ArmatureImporter::set_pose ( Object * ob_arm , COLLADAFW::Node * root_node float obmat[4][4]; bArmature * arm = (bArmature * ) ob_arm-> data ; - EditBone *edbone = NULL ; + float ax[3]; + float angle = NULL; // object-space get_node_mat(obmat, root_node, NULL, NULL); @@ -560,15 +567,18 @@ void ArmatureImporter::set_pose ( Object * ob_arm , COLLADAFW::Node * root_node bPoseChannel *parchan = get_pose_channel(ob_arm->pose, parentname); mul_m4_m4m4(pchan->pose_mat, mat , parchan->pose_mat); + } else { copy_m4_m4(mat, obmat); float invObmat[4][4]; invert_m4_m4(invObmat, ob_arm->obmat); mul_m4_m4m4(pchan->pose_mat, mat, invObmat); + } - + mat4_to_axis_angle(ax,&angle,mat); + pchan->bone->roll = angle; COLLADAFW::NodePointerArray& children = root_node->getChildNodes(); @@ -632,7 +642,8 @@ void ArmatureImporter::make_armatures(bContext *C) // free memory stolen from SkinControllerData skin.free(); } - + + //for bones without skins create_armature_bones(); } diff --git a/source/blender/collada/CameraExporter.cpp b/source/blender/collada/CameraExporter.cpp index f8fa0fd55c0..9d09f170776 100644 --- a/source/blender/collada/CameraExporter.cpp +++ b/source/blender/collada/CameraExporter.cpp @@ -73,7 +73,7 @@ void CamerasExporter::operator()(Object *ob, Scene *sce) if (cam->type == CAM_PERSP) { COLLADASW::PerspectiveOptic persp(mSW); persp.setXFov(lens_to_angle(cam->lens)*(180.0f/M_PI)); - persp.setAspectRatio((float)(sce->r.xsch)/(float)(sce->r.ysch)); + persp.setAspectRatio((float)(sce->r.xsch)/(float)(sce->r.ysch),false,cam_name); persp.setZFar(cam->clipend); persp.setZNear(cam->clipsta); COLLADASW::Camera ccam(mSW, &persp, cam_id, cam_name); diff --git a/source/blender/collada/LightExporter.cpp b/source/blender/collada/LightExporter.cpp index 13eb62ca969..ebcc70013b4 100644 --- a/source/blender/collada/LightExporter.cpp +++ b/source/blender/collada/LightExporter.cpp @@ -101,7 +101,7 @@ void LightsExporter::operator()(Object *ob) // spot else if (la->type == LA_SPOT) { COLLADASW::SpotLight cla(mSW, la_id, la_name); - cla.setColor(col); + cla.setColor(col,false,"Color"); cla.setFallOffAngle(la->spotsize); cla.setFallOffExponent(la->spotblend); cla.setConstantAttenuation(constatt); -- cgit v1.2.3