2017-08-07 2 views
0

Ich möchte 3D-Modell auf WPF-Anwendung anzeigen. Daten kommen von Arduino serielle Verbindung.Wie 3D-Modell mit 3 Achsen X Y Z mit HelixToolkit drehen?

Ich kann Modell anzeigen, aber ich weiß nicht, wie X, Y, Z-Achse zu drehen.

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

gibt es Informationen über Funktionen. Ich führe folgende Funktion, um Objekt (nicht Kamera) zu drehen, aber es bewegt sich nicht. Wie kann ich ein Modell mit nur 3 Variablen (x, y, z) bewegen?

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

Antwort

0

Das Objekt, das Sie drehen möchten, sollte ModelVisual3D sein, das zum Helix-Ansichtsfenster hinzugefügt wurde.

das Matrix3D-Objekt aus ModelVisual3D.Transform3D Get, hier ist eine Funktion zur Drehung um beliebige Achse:

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; 
    } 

setzen Sie dann die Transform3D = new MatrixTransform3D (matrix3D).

Ich hoffe, es hilft jemandem ...

Verwandte Themen