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 ....