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);
        }
Exemple #2
0
 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);
        }