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

问题描述:

我想在wpf应用程序上显示3d模型。数据来自Arduino串行连接。如何使用HelixToolkit以3轴X Y Z旋转3D模型?

我可以显示模型,但我不知道如何旋转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));

要旋转的对象应该是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 =新MatrixTransform3D(的Matrix3D)。

希望它可以帮助别人......