2010-01-14 5 views
5

Ho un ModelVisual3D di un cubo e desidero animarlo per ruotare attorno al suo asse per 360 gradi. Faccio un RoationTransform3D che dico di ruotare 360 ​​ma non ruota affatto, anche se dici 270 gradi ruota solo di 90 gradi ma nella direzione opposta. Immagino che il computer calcoli il "percorso più breve" della rotazione. La soluzione migliore che ho trovato è quella di fare un giro di animazione di 180 e dopo aver finito chiama un altro 180 per completare la rotazione completa. C'è un modo per farlo in un'animazione?Rotazione di 360 gradi in WPF 3D

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); 

risposta

3

mia comprensione è che il Rotation3DAnimation utilizza un'interpolazione lineare sferica, così sarà sempre trovare il percorso più breve.

Una soluzione alternativa è utilizzare Rotation3DAnimationUsingKeyFrames: impostare un fotogramma chiave a 120, 240 e 360 ​​e si dovrebbe essere a posto.

Spiacente nessun codice in questo momento, non ho WPF su questa macchina ...

-Jason

1

So che questo è stato già risposto, ma nella mia ricerca di un modo migliore per fare questo ho ha trovato questa alternativa:

È possibile impostare il valore di rotazione su 180 (o metà di quello che si desidera ruotare), quindi impostare il comportamento di ripetizione da ripetere due volte e "IsCummulative" su true.