fix bone scale/rotation in AnimationPlayers
fixes #17325. The bone pose transform was created by setting the rotation and **then** scaling the transform. This leads to object "deformation" that's not intended.
This commit is contained in:
parent
9ad1800298
commit
4303fbca5a
|
@ -590,8 +590,8 @@ void AnimationPlayer::_animation_update_transforms() {
|
||||||
|
|
||||||
Transform t;
|
Transform t;
|
||||||
t.origin = nc->loc_accum;
|
t.origin = nc->loc_accum;
|
||||||
t.basis = nc->rot_accum;
|
|
||||||
t.basis.scale(nc->scale_accum);
|
t.basis.scale(nc->scale_accum);
|
||||||
|
t.basis.rotate(nc->rot_accum.get_euler());
|
||||||
|
|
||||||
if (nc->skeleton && nc->bone_idx >= 0) {
|
if (nc->skeleton && nc->bone_idx >= 0) {
|
||||||
|
|
||||||
|
|
|
@ -895,13 +895,13 @@ void AnimationTreePlayer::_process_animation(float p_delta) {
|
||||||
}
|
}
|
||||||
|
|
||||||
Transform xform;
|
Transform xform;
|
||||||
xform.basis = t.rot;
|
|
||||||
xform.origin = t.loc;
|
xform.origin = t.loc;
|
||||||
|
|
||||||
t.scale.x += 1.0;
|
t.scale.x += 1.0;
|
||||||
t.scale.y += 1.0;
|
t.scale.y += 1.0;
|
||||||
t.scale.z += 1.0;
|
t.scale.z += 1.0;
|
||||||
xform.basis.scale(t.scale);
|
xform.basis.scale(t.scale);
|
||||||
|
xform.basis.rotate(t.rot.get_euler());
|
||||||
|
|
||||||
if (t.bone_idx >= 0) {
|
if (t.bone_idx >= 0) {
|
||||||
if (t.skeleton)
|
if (t.skeleton)
|
||||||
|
|
Loading…
Reference in New Issue