2010-11-15 7 views
2

J'ai un objet 3D transparent dans WPF. La valeur d'opacité du pinceau utilisé pour créer l'objet a été définie sur 0.25. Je dois faire pivoter cet objet 3D autour de son point central en utilisant le mouvement de la souris. Actuellement, l'objet tourne dans le sens contraire du mouvement de la souris. Est-ce que quelqu'un a une idée sur la façon de faire pivoter un objet transparent dans l'espace 3D?Rotation d'objet 3D dans WPF

Le code utilisé pour la rotation est:

public static void DoMouseMoveEvent(object sender, MouseEventArgs e, Transform3DGroup transform3DGroup, System.Windows.Controls.Viewport3D viewport3D, ref Point mLastPos, Point3D centerPoint) 
    { 
     var pos = Mouse.GetPosition(viewport3D); 


     var actualPos = new Point(pos.X - viewport3D.ActualWidth/2, 
       viewport3D.ActualHeight/2 - pos.Y); 
     double dx = actualPos.X - mLastPos.X; 
     double dy = actualPos.Y - mLastPos.Y; 

     double mouseAngle = 0; 

     if (dx != 0 && dy != 0) 
     { 
      mouseAngle = Math.Asin(Math.Abs(dy)/
       Math.Sqrt(Math.Pow(dx, 2) + Math.Pow(dy, 2))); 
      if (dx < 0 && dy > 0) mouseAngle += Math.PI/2; 
      else if (dx < 0 && dy < 0) mouseAngle += Math.PI; 
      else if (dx > 0 && dy < 0) mouseAngle += Math.PI * 1.5; 
     } 
     else if (dx == 0 && dy != 0) 
     { 
      mouseAngle = Math.Sign(dy) > 0 ? Math.PI/2 : Math.PI * 1.5; 
     } 
     else if (dx != 0 && dy == 0) 
     { 
      mouseAngle = Math.Sign(dx) > 0 ? 0 : Math.PI; 
     } 

     double axisAngle = mouseAngle + Math.PI/2; 

     var axis = new Vector3D(Math.Cos(axisAngle) * 4, Math.Sin(axisAngle) * 4, 0); 

     //axis.Normalize(); 

     double rotation = 0.02 * Math.Sqrt(Math.Pow(dx, 2) + Math.Pow(dy, 2)); 

     var r = new QuaternionRotation3D(new Quaternion(axis, rotation * 180/Math.PI)); 

     var rotateTransform = new RotateTransform3D(r, centerPoint);    

     transform3DGroup.Children.Add(rotateTransform); 

     mLastPos = actualPos; 
    } 

pourrait la raison du comportement incorrect est que la coordonnée z ne soit pas capturé pour calculer la rotation dans l'extrait de code ci-dessus?

Merci pour l'aide ....

Répondre

0

je pense que problème dans z coordonnées. Cherchez la coordonnée z en utilisant pour la position dans la troisième dimension, si vous n'utilisez pas cette coordonnée pivoter la figure en trois dimensions très dur. Si vous calculez la coordonnée z je pense que le problème sera résolu