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); }
public Matrix4 ExtractBasis(Vector3 xAxis, Vector3 yAxis, Vector3 zAxis) { xAxis.SetFromMatrixColumn(this, 0); yAxis.SetFromMatrixColumn(this, 1); zAxis.SetFromMatrixColumn(this, 2); return(this); }