3D анимация, вращающаяся и переводящая одновременно в WPF - PullRequest
1 голос
/ 12 января 2010

У меня есть ModelVisual3D куба. Я хочу перевести и повернуть его одновременно. Я хочу, чтобы центр вращения находился посередине куба (куб вращается вокруг своей оси). Но когда я пытаюсь сделать это, применяя обе трансформации, эффект не тот, который вы ожидаете. Поскольку объект перемещается, центр вращения отличается, что заставляет его двигаться и вращаться странным образом. Как получить желаемый эффект?

Transform3DGroup transGroup = new Transform3DGroup();

DoubleAnimation cardAnimation = new DoubleAnimation();
cardAnimation.From = 0;
cardAnimation.To = 3;
cardAnimation.Duration = new Duration(TimeSpan.FromSeconds(2));

Transform3D transform = new TranslateTransform3D(0,0,0);
transGroup.Children.Add(transform);


RotateTransform3D rotateTransform = new RotateTransform3D();
AxisAngleRotation3D rotateAxis = 
  new AxisAngleRotation3D(new Vector3D(0, 1, 0), 180);
Rotation3DAnimation rotateAnimation = 
  new Rotation3DAnimation(rotateAxis, TimeSpan.FromSeconds(2));
rotateAnimation.DecelerationRatio = 0.8;

transGroup.Children.Add(rotateTransform);


Model.Transform = transGroup;

transform.BeginAnimation(TranslateTransform3D.OffsetXProperty, 
  cardAnimation);
rotateTransform.BeginAnimation(RotateTransform3D.RotationProperty, 
  rotateAnimation);

Ответы [ 2 ]

2 голосов
/ 12 января 2010

Сначала примените вращение, а затем перевод. Это гарантирует, что куб вращается вокруг правильной точки - его центр, а затем переводится.

Я имел в виду обратный порядок, в котором вы применяете ваши преобразования. Умножение матриц не является коммутативным, поэтому вы получите разные результаты в зависимости от порядка применения преобразования.

Также может быть проще обновить матрицы и повторно применить полное преобразование, чем каждый раз применять дельту.

0 голосов
/ 30 мая 2010

Вот как это можно сделать без перевода и преобразования:

rotateTransform.CenterX = 0;
rotateTransform.CenterY = 0;
rotateTransform.CenterZ = 0;

Не знаю для солнца в анимации. Работает вручную после привязки к слайдеру

...