public static DualQuaternion convertToDQ(this IGMatrix _input) { Matrix _matrix = new Matrix(_input.GetRow(0).X, _input.GetRow(0).Y, _input.GetRow(0).Z, 0, _input.GetRow(1).X, _input.GetRow(1).Y, _input.GetRow(1).Z, 0, _input.GetRow(2).X, _input.GetRow(2).Y, _input.GetRow(2).Z, 0, _input.GetRow(3).X, _input.GetRow(3).Y, _input.GetRow(3).Z, 1); Quaternion _node_LQ; Vector3 _node_LS; Vector3 _node_LT; _matrix.Decompose(out _node_LS, out _node_LQ, out _node_LT); DualQuaternion _output = new DualQuaternion(_node_LQ, _node_LT); return(_output); }
public static float[] ToArray(this IGMatrix gmat) { //float eulX =0, eulY=0, eulZ=0; //unsafe //{ // gmat.Rotation.GetEuler( new IntPtr(&eulX), new IntPtr(&eulY), new IntPtr(&eulZ)); //} //return (Matrix.Scaling(gmat.Scaling.X, gmat.Scaling.Y, gmat.Scaling.Z) * Matrix.RotationYawPitchRoll(eulY, eulX, eulZ) * Matrix.Translation(gmat.Translation.X, gmat.Translation.Y, gmat.Translation.Z)).ToArray(); var r0 = gmat.GetRow(0); var r1 = gmat.GetRow(1); var r2 = gmat.GetRow(2); var r3 = gmat.GetRow(3); return new float[] {r0.X, r0.Y, r0.Z, r0.W, r1.X, r1.Y,r1.Z, r1.W, r2.X, r2.Y,r2.Z, r2.W, r3.X, r3.Y,r3.Z, r3.W,}; }
public static DualQuaternion convertToDQ(this IGMatrix _input, Transformation _transformation) { Matrix _matrix = new Matrix(_input.GetRow(0).X, _input.GetRow(0).Y, _input.GetRow(0).Z, 0, _input.GetRow(1).X, _input.GetRow(1).Y, _input.GetRow(1).Z, 0, _input.GetRow(2).X, _input.GetRow(2).Y, _input.GetRow(2).Z, 0, _input.GetRow(3).X, _input.GetRow(3).Y, _input.GetRow(3).Z, 1); Quaternion _node_LQ; Vector3 _node_LS; Vector3 _node_LT; _matrix.Decompose(out _node_LS, out _node_LQ, out _node_LT); DualQuaternion _output = DualQuaternion.Identity; if (_transformation == Transformation.All) { _output = new DualQuaternion(_node_LQ, _node_LT); } if (_transformation == Transformation.Rotation) { _output = new DualQuaternion(_node_LQ, Vector3.Zero); } if (_transformation == Transformation.Translation) { _output = new DualQuaternion(Quaternion.Identity, _node_LT); } return(_output); }
public static Matrix convertTo(this IGMatrix _input) { Matrix _output = new Matrix(_input.GetRow(0).X, _input.GetRow(0).Y, _input.GetRow(0).Z, 0, _input.GetRow(1).X, _input.GetRow(1).Y, _input.GetRow(1).Z, 0, _input.GetRow(2).X, _input.GetRow(2).Y, _input.GetRow(2).Z, 0, _input.GetRow(3).X, _input.GetRow(3).Y, _input.GetRow(3).Z, 1); return(_output); }