如何使用HelixToolkit旋转3轴X Y Z的3D模型?

时间:2017-08-07 01:04:06

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

我想在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));

1 个答案:

答案 0 :(得分:0)

要旋转的对象应为ModelVisual3D,添加到螺旋视口。

从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)。

希望它有所帮助...