2010-12-06 10 views
5

J'ai un Model3DGroup qui est pivoté autour de l'un des axes x, y, z en utilisant un AxisAngleRotation3D appliqué sur la propriété Transform de l'objet.Comment récupérer l'angle de rotation 3D sur chaque axe?

Le problème est que je ne suis pas en contrôle des différentes rotations appliquées sur le maillage. J'ai besoin d'afficher l'angle du maillage sur chacun des axes x, y, z à chaque boucle de rendu.

Comment puis-je faire cela? J'ai essayé de récupérer l'objet AxisAngleRotation3D sur l'objet, mais cela ne me donne que la dernière rotation appliquée. Ce qui n'est pas correct.

Si par exemple il y avait une rotation appliquée de Axe: Vector3D (1, 1, 0) Angle: 45

La rotation réelle autour de l'axe Z ne serait pas 0. Comment puis-je obtenir le réel angle sur chaque axe?

Répondre

2
double rotationX = Vector3D.AngleBetween(new Vector3D(1, 0, 0), yourMatrix3D.Transform(new Vector3D(1, 0, 0))); 
double rotationY = Vector3D.AngleBetween(new Vector3D(0, 1, 0), yourMatrix3D.Transform(new Vector3D(0, 1, 0))); 
double rotationZ = Vector3D.AngleBetween(new Vector3D(0, 0, 1), yourMatrix3D.Transform(new Vector3D(0, 0, 1)));