Вращение на 360 градусов в WPF 3D

У меня есть ModelVisual3D куба, и я хочу анимировать его, чтобы он вращался вокруг своей оси на 360 градусов. Я делаю RoationTransform3D, который я говорю, чтобы повернуть на 360, но он не вращается вообще, даже если вы скажете 270 градусов, он поворачивается только на 90 градусов, но в противоположном направлении. Я предполагаю, что компьютер вычисляет "кратчайший путь" вращения. Лучшее решение, которое я придумала, - сделать один анимационный поворот на 180, а после его завершения вызвать еще 180, чтобы завершить полный оборот. Есть ли способ сделать это в одной анимации?

RotateTransform3D rotateTransform = new RotateTransform3D();
myCube.Model.Transform = rotateTransform;

AxisAngleRotation3D rotateAxis =
      new AxisAngleRotation3D(new Vector3D(0, 1, 0), 180/*or 360*/);
Rotation3DAnimation rotateAnimation =
      new Rotation3DAnimation(rotateAxis, TimeSpan.FromSeconds(2));

rotateTransform.BeginAnimation(RotateTransform3D.RotationProperty,
      rotateAnimation);

2 ответа

Решение

Насколько я понимаю, Rotation3DAnimation использует сферическую линейную интерполяцию, поэтому она всегда найдет кратчайший путь.

Одним из обходных путей является использование Rotation3DAnimationUsingKeyFrames: установите ключевой кадр на 120, 240 и 360, и все будет хорошо.

Извините, сейчас нет кода, у меня нет WPF на этой машине...

Джейсон

Я знаю, что на это уже ответили, но в поисках лучшего способа сделать это я нашел эту альтернативу:

Вы можете установить значение поворота на 180 (или половину того, что вы хотите повернуть), а затем установить поведение повтора, чтобы повторять дважды, а "IsCummulative" - true.

Другие вопросы по тегам