2017-08-07 17 views
0

wpfアプリケーションで3dモデルを表示したい。データはarduinoシリアル接続から得られます。HelixToolkitを使用して3軸のXYZで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));

答えて

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 =新しいMatrixTransform3D(のMatrix3D)を設定します。

誰かを助けることを願っています。

関連する問題