Matrix Matrix4::getAffineMat() const { Matrix result; extract3x3Matrix(result.axis); result.origin = m[3].xyz(); return result; }
void Matrix4::decomposition(Vector3& position, Vector3& scale, Quaternion& orientation) const { Matrix3 matQ; Vector3 vecU; extract3x3Matrix().QDUDecomposition( matQ, scale, vecU ); orientation = Quaternion(matQ); position = Vector3(m[0][3], m[1][3], m[2][3]); }
void Matrix4::decomposition(Vector3& position, Vector3& scale, Quaternion& orientation) const { assert(isAffine()); Matrix3 m3x3; extract3x3Matrix(m3x3); Matrix3 matQ; Vector3 vecU; m3x3.QDUDecomposition(matQ, scale, vecU); orientation = Quaternion(matQ); position = Vector3(m[0][3], m[1][3], m[2][3]); }
//----------------------------------------------------------------------- void DiMat4::decomposition(DiVec3& position, DiVec3& scale, DiQuat& orientation) const { DI_ASSERT(isAffine()); DiMat3 m3x3; extract3x3Matrix(m3x3); DiMat3 matQ; DiVec3 vecU; m3x3.QDUDecomposition( matQ, scale, vecU ); orientation = DiQuat( matQ ); position = DiVec3( m[0][3], m[1][3], m[2][3] ); }