Set Edit bone roll on Armature Import.
+ Light->Color Sid for testing.
This commit is contained in:
@@ -776,36 +776,7 @@ void AnimationImporter::translate_Animations_NEW ( COLLADAFW::Node * node ,
|
|||||||
ob->rotmode = ROT_MODE_EUL;
|
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);
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -351,12 +351,17 @@ std::string ArmatureExporter::add_inv_bind_mats_source(Object *ob_arm, ListBase
|
|||||||
|
|
||||||
bPoseChannel *pchan = get_pose_channel(pose, def->name);
|
bPoseChannel *pchan = get_pose_channel(pose, def->name);
|
||||||
|
|
||||||
|
float pose_mat[4][4];
|
||||||
float mat[4][4];
|
float mat[4][4];
|
||||||
float world[4][4];
|
float world[4][4];
|
||||||
float inv_bind_mat[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
|
// 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);
|
invert_m4_m4(mat, world);
|
||||||
converter.mat4_to_dae(inv_bind_mat, mat);
|
converter.mat4_to_dae(inv_bind_mat, mat);
|
||||||
|
|||||||
@@ -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));
|
bPoseChannel *pchan = get_pose_channel(ob_arm->pose, (char*)bc_get_joint_name(node));
|
||||||
|
|
||||||
if (parent) bone->parent = parent;
|
if (parent) bone->parent = parent;
|
||||||
|
float ax[3];
|
||||||
|
float angle = NULL;
|
||||||
|
|
||||||
// get world-space
|
// get world-space
|
||||||
if (parent){
|
if (parent){
|
||||||
mul_m4_m4m4(mat, obmat, parent_mat);
|
mul_m4_m4m4(mat, obmat, parent_mat);
|
||||||
bPoseChannel *parchan = get_pose_channel(ob_arm->pose, parent->name);
|
bPoseChannel *parchan = get_pose_channel(ob_arm->pose, parent->name);
|
||||||
if ( parchan && pchan)
|
if ( parchan && pchan)
|
||||||
mul_m4_m4m4(pchan->pose_mat, mat , parchan->pose_mat);
|
mul_m4_m4m4(pchan->pose_mat, mat , parchan->pose_mat);
|
||||||
|
mat4_to_axis_angle(ax,&angle,mat);
|
||||||
|
bone->roll = angle;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
copy_m4_m4(mat, obmat);
|
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);
|
invert_m4_m4(invObmat, ob_arm->obmat);
|
||||||
if(pchan)
|
if(pchan)
|
||||||
mul_m4_m4m4(pchan->pose_mat, mat, invObmat);
|
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];
|
float obmat[4][4];
|
||||||
|
|
||||||
bArmature * arm = (bArmature * ) ob_arm-> data ;
|
bArmature * arm = (bArmature * ) ob_arm-> data ;
|
||||||
EditBone *edbone = NULL ;
|
float ax[3];
|
||||||
|
float angle = NULL;
|
||||||
|
|
||||||
// object-space
|
// object-space
|
||||||
get_node_mat(obmat, root_node, NULL, NULL);
|
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);
|
bPoseChannel *parchan = get_pose_channel(ob_arm->pose, parentname);
|
||||||
|
|
||||||
mul_m4_m4m4(pchan->pose_mat, mat , parchan->pose_mat);
|
mul_m4_m4m4(pchan->pose_mat, mat , parchan->pose_mat);
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
copy_m4_m4(mat, obmat);
|
copy_m4_m4(mat, obmat);
|
||||||
float invObmat[4][4];
|
float invObmat[4][4];
|
||||||
invert_m4_m4(invObmat, ob_arm->obmat);
|
invert_m4_m4(invObmat, ob_arm->obmat);
|
||||||
mul_m4_m4m4(pchan->pose_mat, mat, invObmat);
|
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();
|
COLLADAFW::NodePointerArray& children = root_node->getChildNodes();
|
||||||
@@ -632,7 +642,8 @@ void ArmatureImporter::make_armatures(bContext *C)
|
|||||||
// free memory stolen from SkinControllerData
|
// free memory stolen from SkinControllerData
|
||||||
skin.free();
|
skin.free();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//for bones without skins
|
||||||
create_armature_bones();
|
create_armature_bones();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ void CamerasExporter::operator()(Object *ob, Scene *sce)
|
|||||||
if (cam->type == CAM_PERSP) {
|
if (cam->type == CAM_PERSP) {
|
||||||
COLLADASW::PerspectiveOptic persp(mSW);
|
COLLADASW::PerspectiveOptic persp(mSW);
|
||||||
persp.setXFov(lens_to_angle(cam->lens)*(180.0f/M_PI));
|
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.setZFar(cam->clipend);
|
||||||
persp.setZNear(cam->clipsta);
|
persp.setZNear(cam->clipsta);
|
||||||
COLLADASW::Camera ccam(mSW, &persp, cam_id, cam_name);
|
COLLADASW::Camera ccam(mSW, &persp, cam_id, cam_name);
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ void LightsExporter::operator()(Object *ob)
|
|||||||
// spot
|
// spot
|
||||||
else if (la->type == LA_SPOT) {
|
else if (la->type == LA_SPOT) {
|
||||||
COLLADASW::SpotLight cla(mSW, la_id, la_name);
|
COLLADASW::SpotLight cla(mSW, la_id, la_name);
|
||||||
cla.setColor(col);
|
cla.setColor(col,false,"Color");
|
||||||
cla.setFallOffAngle(la->spotsize);
|
cla.setFallOffAngle(la->spotsize);
|
||||||
cla.setFallOffExponent(la->spotblend);
|
cla.setFallOffExponent(la->spotblend);
|
||||||
cla.setConstantAttenuation(constatt);
|
cla.setConstantAttenuation(constatt);
|
||||||
|
|||||||
Reference in New Issue
Block a user