【问题标题】:How to rotate 3D model with 3 axis X Y Z using HelixToolkit?如何使用 HelixToolkit 旋转 3 轴 X Y Z 的 3D 模型?
【发布时间】:2017-12-01 20:12:17
【问题描述】:

我想在 wpf 应用程序上显示 3d 模型。数据来自 arduino 串行连接。

我可以显示模型,但我不知道如何旋转 X、Y、Z 轴。

https://msdn.microsoft.com/en-us/library/system.windows.media.rotatetransform(v=vs.110).aspx

有关于函数的信息。我运行以下函数来旋转对象(不是相机),但它不移动。我如何移动只有 3 个变量(x、y、z)的模型

Models.Transform.Transform(new Point3D(x, y, z));

【问题讨论】:

    标签: c# 3d helix-3d-toolkit


    【解决方案1】:

    您要旋转的对象应该是 ModelVisual3D,添加到 helix 视口。

    从 ModelVisual3D.Transform3D 中获取 Matrix3D 对象,这是一个绕任意轴旋转的函数:

    public static Matrix3D Rotate(this Matrix3D m, Vector3D vr, double angleDeg, bool multiply = true)
        {
            var rm = new Matrix3D();
            //vr /= vr.Length;
            vr.Normalize();
            var t = angleDeg.ToRad();
            var c = Math.Cos(t);
            var s = Math.Sin(t);
            var c1 = 1 - c;
            var x = vr.X; var y = vr.Y; var z = vr.Z;
            var x2 = x * x; var y2 = y * y; var z2 = z * z;
            var xy = x * y;
            var xz = x * z;
            var yz = y * z;
    
            //col 1
            rm.M11 = c1 * x2 + c;
            rm.M21 = c1 * xy - s * z;
            rm.M31 = c1 * xz + s * y;
            //col 2
            rm.M12 = c1 * xy + s * z;
            rm.M22 = c1 * y2 + c;
            rm.M32 = c1 * yz - s * x;
            //col 3
            rm.M13 = c1 * xz - s * y;
            rm.M23 = c1 * yz + s * x;
            rm.M33 = c1 * z2 + c;
    
            if (multiply) return rm * m;
            return rm;
        }
    

    然后设置Transform3D = new MatrixTransform3D(matrix3D)。

    希望对某人有所帮助...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-18
      • 1970-01-01
      • 1970-01-01
      • 2020-06-05
      • 2021-07-12
      • 2018-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多