在WPF中将原位转换应用于3D模型

时间:2009-02-05 07:10:39

标签: wpf 3d rotation

我有一个简单的3D立方体,我可以使用以下代码旋转:

void mui3D_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
            RotateTransform3D rotation = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 1, 0), 0), mui.Model.Bounds.Location);

            DoubleAnimation rotateAnim = new DoubleAnimation(0, 130d TimeSpan.FromMilliseconds(3000));

            rotateAnim.Completed += new EventHandler(rotateAnim_Completed); 

            mui.Transform = rotation;

            rotation.Rotation.BeginAnimation(AxisAngleRotation3D.AngleProperty, rotateAnim);
    }

每次执行时,此代码都会使用围绕Y轴的动画从0到130度的角度旋转立方体。

但是我想要“累积”地应用旋转,以便考虑任何先前的旋转,并且立方体从完成前一次旋转的角度开始每次旋转。

例如:动画构造函数不需要角度的“从”和“到”值,只需根据当前旋转角度旋转立方体130度。

我可以轻松地使用包含当前角度的成员变量,将其传递给动画,然后在动画完成时更新它。但我想知道是否有使用WPF实现这一目标的标准方法。

1 个答案:

答案 0 :(得分:1)

我确信有一种方法可以从对象的变换矩阵中检索当前的Euler旋转角度(以度为单位)。然后,您可以将其用作“from”值,并将“an”值设置为“to”值。

如果不这样做,只需在应用程序的某处创建一个变量,该变量会记住多维数据集旋转的度数。每次运行该函数时,只需添加您想要旋转的度数,然后将结果存储回变量中。

一些伪代码:

angle = 0
function onClick:
    new_angle = angle + 30
    Animate(angle, new_angle)
    angle = new_angle