Move cross of base bone to its tip

This commit is contained in:
hodasemi 2018-06-12 13:29:35 +02:00
parent d3e440aeea
commit a792259004

View file

@ -97,6 +97,8 @@ void IKViewer::calculate_kinematic_chain(Bone *base, Bone *endeffector)
current_base_matrix = current_base_matrix * transform->calculate_matrix(); current_base_matrix = current_base_matrix * transform->calculate_matrix();
} }
current_base_matrix = current_base_matrix * base->get_translation_transform_current_joint_to_next();
if (!endeffector) if (!endeffector)
return; return;
@ -178,11 +180,14 @@ void IKViewer::calculate_kinematic_chain(Bone *base, Bone *endeffector)
} }
else else
{ {
// can't ever happen, but when it does, we will know // can never happen, but when it does, we will know
abort(); abort();
} }
} }
std::shared_ptr<Transform> inverse_static = std::shared_ptr<Transform>(new StaticTransform(inv(base->get_translation_transform_current_joint_to_next())));
kinematic_chain.emplace_front(inverse_static);
current_endeffector_matrix.identity(); current_endeffector_matrix.identity();
for (auto &transform : kinematic_chain) for (auto &transform : kinematic_chain)
@ -191,9 +196,6 @@ void IKViewer::calculate_kinematic_chain(Bone *base, Bone *endeffector)
} }
target_position = current_base_matrix * current_endeffector_matrix * endeffector->get_bone_local_tip_position(); target_position = current_base_matrix * current_endeffector_matrix * endeffector->get_bone_local_tip_position();
print_vec3(target_position);
std::cout << std::endl;
} }
void IKViewer::optimize() void IKViewer::optimize()
@ -210,7 +212,7 @@ void IKViewer::optimize()
/*Task 3.3: Implement CCD */ /*Task 3.3: Implement CCD */
for (int i = 0; i < max_iterations; i++) for (int i = 0; i < max_iterations; i++)
{ {
for (auto it = kinematic_chain.rbegin(); it != kinematic_chain.rend(); i++) for (auto it = kinematic_chain.rbegin(); it != kinematic_chain.rend(); it++)
{ {
//it->optimize_value(/*local_vector*/, target_position); //it->optimize_value(/*local_vector*/, target_position);
} }