Fixed incorrect blending in Pos/Rot/Scl Track
This commit is contained in:
parent
e317e34c15
commit
78f5ce04f4
|
@ -934,15 +934,12 @@ void AnimationTree::_process_graph(real_t p_delta) {
|
|||
#ifndef _3D_DISABLED
|
||||
TrackCacheTransform *t = static_cast<TrackCacheTransform *>(track);
|
||||
|
||||
if (t->process_pass != process_pass) {
|
||||
t->process_pass = process_pass;
|
||||
t->loc = Vector3();
|
||||
t->rot = Quaternion();
|
||||
t->rot_blend_accum = 0;
|
||||
t->scale = Vector3(1, 1, 1);
|
||||
}
|
||||
|
||||
if (track->root_motion) {
|
||||
if (t->process_pass != process_pass) {
|
||||
t->process_pass = process_pass;
|
||||
t->loc = Vector3();
|
||||
}
|
||||
|
||||
double prev_time = time - delta;
|
||||
if (!backward) {
|
||||
if (prev_time < 0) {
|
||||
|
@ -1015,6 +1012,12 @@ void AnimationTree::_process_graph(real_t p_delta) {
|
|||
Vector3 loc;
|
||||
|
||||
Error err = a->position_track_interpolate(i, time, &loc);
|
||||
|
||||
if (t->process_pass != process_pass) {
|
||||
t->process_pass = process_pass;
|
||||
t->loc = loc;
|
||||
}
|
||||
|
||||
if (err != OK) {
|
||||
continue;
|
||||
}
|
||||
|
@ -1027,15 +1030,12 @@ void AnimationTree::_process_graph(real_t p_delta) {
|
|||
#ifndef _3D_DISABLED
|
||||
TrackCacheTransform *t = static_cast<TrackCacheTransform *>(track);
|
||||
|
||||
if (t->process_pass != process_pass) {
|
||||
t->process_pass = process_pass;
|
||||
t->loc = Vector3();
|
||||
t->rot = Quaternion();
|
||||
t->rot_blend_accum = 0;
|
||||
t->scale = Vector3(1, 1, 1);
|
||||
}
|
||||
|
||||
if (track->root_motion) {
|
||||
if (t->process_pass != process_pass) {
|
||||
t->process_pass = process_pass;
|
||||
t->rot = Quaternion();
|
||||
}
|
||||
|
||||
double prev_time = time - delta;
|
||||
if (!backward) {
|
||||
if (prev_time < 0) {
|
||||
|
@ -1111,18 +1111,17 @@ void AnimationTree::_process_graph(real_t p_delta) {
|
|||
Quaternion rot;
|
||||
|
||||
Error err = a->rotation_track_interpolate(i, time, &rot);
|
||||
|
||||
if (t->process_pass != process_pass) {
|
||||
t->process_pass = process_pass;
|
||||
t->rot = rot;
|
||||
}
|
||||
|
||||
if (err != OK) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (t->rot_blend_accum == 0) {
|
||||
t->rot = rot;
|
||||
t->rot_blend_accum = blend;
|
||||
} else {
|
||||
real_t 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->rot = t->rot.slerp(rot, blend).normalized();
|
||||
}
|
||||
#endif // _3D_DISABLED
|
||||
} break;
|
||||
|
@ -1130,15 +1129,12 @@ void AnimationTree::_process_graph(real_t p_delta) {
|
|||
#ifndef _3D_DISABLED
|
||||
TrackCacheTransform *t = static_cast<TrackCacheTransform *>(track);
|
||||
|
||||
if (t->process_pass != process_pass) {
|
||||
t->process_pass = process_pass;
|
||||
t->loc = Vector3();
|
||||
t->rot = Quaternion();
|
||||
t->rot_blend_accum = 0;
|
||||
t->scale = Vector3(1, 1, 1);
|
||||
}
|
||||
|
||||
if (track->root_motion) {
|
||||
if (t->process_pass != process_pass) {
|
||||
t->process_pass = process_pass;
|
||||
t->scale = Vector3(1, 1, 1);
|
||||
}
|
||||
|
||||
double prev_time = time - delta;
|
||||
if (!backward) {
|
||||
if (prev_time < 0) {
|
||||
|
@ -1211,6 +1207,12 @@ void AnimationTree::_process_graph(real_t p_delta) {
|
|||
Vector3 scale;
|
||||
|
||||
Error err = a->scale_track_interpolate(i, time, &scale);
|
||||
|
||||
if (t->process_pass != process_pass) {
|
||||
t->process_pass = process_pass;
|
||||
t->scale = scale;
|
||||
}
|
||||
|
||||
if (err != OK) {
|
||||
continue;
|
||||
}
|
||||
|
|
|
@ -199,7 +199,6 @@ private:
|
|||
bool scale_used = false;
|
||||
Vector3 loc;
|
||||
Quaternion rot;
|
||||
real_t rot_blend_accum = 0.0;
|
||||
Vector3 scale;
|
||||
|
||||
TrackCacheTransform() {
|
||||
|
|
Loading…
Reference in a new issue