2013-03-20 2 views
1

Я работаю с 3D-объектами в C#, и я застреваю, пытаясь оживить куб, чтобы вращаться на собственной оси. Кроме того, мне нужно иметь возможность контролировать направление вращения и иметь возможность приостанавливать анимацию.Использование раскадровки для анимации 3D-объекта

My current aproach - это создание раскадровки и попытка получить доступ к объекту «куб», определенному на XAML, но безрезультатно. Может ли кто-нибудь указать мне, что я делаю неправильно?

this.RegisterName("cube", cube);  
    myStoryboard = new Storyboard(); 
    RotateTransform3D myRotateTransform = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 1, 0), 0)); 
    Rotation3DAnimation myRotationAnimation = new Rotation3DAnimation(Rotation,AnimationSpeed); 
    myRotationAnimation.RepeatBehavior = RepeatBehavior.Forever; 
    myRotateTransform.Rotation.BeginAnimation(AxisAngleRotation3D.AxisProperty, myVectorAnimation); 
    myStoryboard.Children.Add(myRotationAnimation); 
    Storyboard.SetTargetName(myRotationAnimation, "cube"); 
    Storyboard.SetTarget(myRotationAnimation,cube.Transform); 
    myStoryboard.Begin(); 

Ошибка этот выход код:

Cannot animate '(0)' on an immutable object instance. 

ответ

0

Когда вы говорите, но безрезультатно, в какой ситуации вы сейчас? Если вы в настоящее время сталкиваетесь с исключением в начале вашей программы, я бы попытался определить ваш Storyboard в xaml или, наоборот, ваш куб в C# и вызвать метод RegisterName вашего FrameworkElement. Если нет, пожалуйста, уточните.

+0

При компиляции этой arrises ошибки на myStoryboard.Begin() строка: 'Не можете анимировать '(0)' на экземпляре неизменяемого объекта. Я также попытался анимировать поворот с помощью AxisAngleRotation3D и литья .BeginAnimation(); на этом объекте, но я не мог обработать изменения в ротации изящно (и правильно, анимация вернулась в исходное положение при остановке .BeginAnimation). – rdlf

+0

Я думаю, что проблема исходит от 'Storyboard.SetTarget (myRotationAnimation, cube.Transform);' Проверьте эту ссылку, это может помочь вам: [Как повернуть куб] (http://www.codegod.com/wpf -3D-анимация и-текстура-AID439.aspx) – BenFradet

0

Я хотел бы объявить StoryBoard в XAML (так как вы можете создать то, что хотите очень легко в Blend, или создать его все в XAMl, а затем настроить его на C#, сохраняет необходимость создавать все его в коде (который это кошмар)).

Вот куб в XAML

я вращающийся 3d куб здесь: http://www.codeproject.com/Articles/30078/WPF-A-3D-screensaver-written-in-WPF

Смежные вопросы