2009-02-05 74 views
2

我有一個簡單的3D立方體,我可以用下面的代碼旋轉:應用就地轉換到3D模型WPF

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度的角度。

但是我想要「累積地」應用旋轉,以便將任何先前的旋轉考慮在內,並且立方體從它完成前一次旋轉的角度開始每次旋轉。

例如:動畫構造函數不需要角度的「from」和「to」值,只需根據當前旋轉角度旋轉立方體額外的130度即可。

我可以很容易地使用包含當前角度的成員變量,將其傳遞給動畫,然後在動畫完成時更新它。但我想知道是否有一個標準的方法使用WPF來實現這一點。

回答

1

我確定有一種方法可以從對象的變換矩陣中以角度檢索當前歐拉旋轉角度。然後,您可以將其用作「from」值併爲「to」值添加動畫。

如果不這樣做,只需在應用程序中的某個位置創建一個變量,該變量記住已旋轉的立方體的度數。每次函數運行時,只需添加您希望旋轉的度數,然後將結果存回您的變量中。

一些僞代碼:

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

你知道,用於從transofrm矩陣對象歐拉rotaion的方法?我在3D數學上有點生疏,但它聽起來是我要找的。 (否則看起來我有更多的閱讀要做)。我已經試過你的第二個選項,正如我在問題中所說的那樣。不管怎麼說,還是要謝謝你。 – Ash 2009-02-05 07:28:57