The way multiple quaternions being slerped was not good, changed approach to one that seems to work better.

This commit is contained in:
Juan Linietsky 2018-06-27 16:30:48 -03:00
parent 68f7cf13c7
commit 9bab5134cf
3 changed files with 12 additions and 2 deletions

View file

@ -124,9 +124,10 @@ void EditorPropertyRootMotion::_node_assign() {
ti = filters->create_item(ti);
parenthood[accum] = ti;
ti->set_text(0, F->get());
ti->set_selectable(0, false);
ti->set_selectable(0, true);
ti->set_editable(0, false);
ti->set_icon(0, get_icon("BoneAttachment", "EditorIcons"));
ti->set_metadata(0, accum);
} else {
ti = parenthood[accum];
}

View file

@ -813,6 +813,7 @@ void AnimationTree::_process_graph(float p_delta) {
t->process_pass = process_pass;
t->loc = Vector3();
t->rot = Quat();
t->rot_blend_accum = 0;
t->scale = Vector3();
}
@ -876,7 +877,14 @@ void AnimationTree::_process_graph(float p_delta) {
continue;
t->loc = t->loc.linear_interpolate(loc, blend);
t->rot = t->rot.slerp(rot, blend);
if (t->rot_blend_accum==0) {
t->rot = rot;
t->rot_blend_accum = blend;
} else {
float rot_total = t->rot_blend_accum + blend;
t->rot = rot.slerp(t->rot, t->rot_blend_accum / rot_total).normalized();
t->rot_blend_accum = rot_total;
}
t->scale = t->scale.linear_interpolate(scale, blend);
}

View file

@ -161,6 +161,7 @@ private:
int bone_idx;
Vector3 loc;
Quat rot;
float rot_blend_accum;
Vector3 scale;
TrackCacheTransform() {