我想在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));
答案 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)。
希望它有所帮助...