У меня есть 3D прозрачный объект в WPF. Значение непрозрачности для кисти, используемой для создания объекта, было установлено равным 0,25.
Я должен вращать этот трехмерный объект вокруг его центральной точки, используя движение мыши.
В настоящее время объект вращается против направления движения мыши.
У кого-нибудь есть идеи, как вращать прозрачный объект в трехмерном пространстве?
Код, используемый для вращения:
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;
}
Может ли причина неправильного поведения заключаться в том, что координата z не фиксируется для вычисления поворота в приведенном фрагменте кода?
Спасибо за помощь ....