【问题标题】:3D object rotation in WPFWPF 中的 3D 对象旋转
【发布时间】:2017-11-28 13:01:48
【问题描述】:

我在 WPF 中有一个 3D 透明对象。用于创建对象的画笔的不透明度值已设置为 0.25。 我必须使用鼠标移动围绕它的中心点旋转这个 3D 对象。 目前,对象的旋转方向与鼠标移动的方向相反。 有人知道如何在 3D 空间中旋转透明对象吗?

用于旋转的代码是:

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 坐标来计算上述代码 sn-p 中的旋转?

感谢您的帮助....

【问题讨论】:

    标签: wpf 3d


    【解决方案1】:

    我认为 z 坐标有问题。因为 z 坐标用于在三维中的位置,如果你不使用这个坐标在三维旋转图形非常困难。如果您计算 z 坐标,我认为问题将得到解决

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-02
      • 1970-01-01
      • 1970-01-01
      • 2018-09-30
      • 2011-09-02
      • 1970-01-01
      相关资源
      最近更新 更多