예제 #1
0
        public Matrix4 ExtractRotation(Matrix4 m)
        {
            var v1 = new Vector3();

            // this method does not support reflection matrices

            var te = this.elements;
            var me = m.elements;

            var scaleX = 1 / v1.SetFromMatrixColumn(m, 0).Length();
            var scaleY = 1 / v1.SetFromMatrixColumn(m, 1).Length();
            var scaleZ = 1 / v1.SetFromMatrixColumn(m, 2).Length();

            te[0] = me[0] * scaleX;
            te[1] = me[1] * scaleX;
            te[2] = me[2] * scaleX;
            te[3] = 0;

            te[4] = me[4] * scaleY;
            te[5] = me[5] * scaleY;
            te[6] = me[6] * scaleY;
            te[7] = 0;

            te[8]  = me[8] * scaleZ;
            te[9]  = me[9] * scaleZ;
            te[10] = me[10] * scaleZ;
            te[11] = 0;

            te[12] = 0;
            te[13] = 0;
            te[14] = 0;
            te[15] = 1;

            return(this);
        }
예제 #2
0
        public Matrix4 ExtractBasis(Vector3 xAxis, Vector3 yAxis, Vector3 zAxis)
        {
            xAxis.SetFromMatrixColumn(this, 0);
            yAxis.SetFromMatrixColumn(this, 1);
            zAxis.SetFromMatrixColumn(this, 2);

            return(this);
        }