Вращение на 360 градусов в WPF 3D - PullRequest
5 голосов
/ 14 января 2010

У меня есть 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 ]

3 голосов
/ 14 января 2010

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

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

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

1007 * Джейсон *

1 голос
/ 07 апреля 2010

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

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

...