Back to class index
float4x4[Class Summary]
v
zero[static][const]
identity[static][const]
nan[static][const]
ctor (+6 overloads)
GetScale()[const]
ComplementaryProjection()[const]
operator[](row) (+1 overload)
At(row,col) (+1 overload)
Row(row) (+1 overload)
Row3(row)[const]
Col(col)[const]
Diagonal()[const]
ScaleRow3(row,scalar)
ScaleRow(row,scalar)
ScaleCol3(col,scalar)
ScaleCol(col,scalar)
Float3x3Part()[const]
Float3x4Part() (+1 overload)
TranslatePart()[const]
RotatePart()[const]
X/Y/Z()[const]
ptr() (+1 overload)
SetRow3(row,data) (+2 overloads)
SetRow(row,data) (+3 overloads)
SetCol3(column,data) (+2 overloads)
SetCol(column,data) (+3 overloads)
Set(...) (+3 overloads)
Set3x3Part(rotation)
Set3x4Part(rotateTranslate)
SetIdentity()
SwapColumns(col1,col2)
SwapRows(row1,row2)
SetTranslatePart(tx,ty,tz) (+2 overloads)
SetRotatePart/X/Y/Z(...) (+2 overloads)
operator=(rhs) (+4 overloads)
Determinant3()[const]
Determinant4()[const]
SubMatrix(i,j)[const]
Minor(i,j)[const]
Adjugate()[const]
CholeskyDecompose(outL)[const]
LUDecompose(outLower,outUpper)[const]
Inverse(epsilon)
Inverted()[const]
InverseColOrthogonal()
InverseOrthogonalUniformScale()
InverseOrthonormal()
Transpose()
Transposed()[const]
InverseTranspose()
InverseTransposed()[const]
Trace()[const]
Orthogonalize3(...) (+1 overload)
Orthonormalize3(...) (+1 overload)
RemoveScale()
Pivot()
TransformPos(pointVector)[const] (+2 overloads)
TransformDir(directionVector)[const] (+2 overloads)
Transform(vector)[const]
TransformPos(...)[const] (+1 overload)
TransformDir(...)[const] (+1 overload)
Transform(...)[const] (+1 overload)
operator*(rhs)[const] (+5 overloads)
operator/(scalar)[const]
operator+(rhs)[const]
operator-(rhs)[const] (+1 overload)
operator+()[const]
operator*=(scalar)
operator/=(scalar)
operator+=(rhs)
operator-=(rhs)
IsFinite()[const]
IsIdentity(epsilon)[const]
IsLowerTriangular(epsilon)[const]
IsUpperTriangular(epsilon)[const]
IsInvertible(epsilon)[const]
IsSymmetric(epsilon)[const]
IsSkewSymmetric(epsilon)[const]
IsIdempotent(epsilon)[const]
HasUnitaryScale(epsilon)[const]
HasNegativeScale()[const]
HasUniformScale(epsilon)[const]
IsRowOrthogonal3(epsilon)[const]
IsColOrthogonal3(epsilon)[const]
IsOrthonormal3(epsilon)[const]
Equals(other,epsilon)[const]
ContainsProjection(epsilon)[const]
ToString()[const]
SerializeToString()[const]
ToString2()[const]
ToEuler***()[const]
ExtractScale()[const]
Decompose(...)[const] (+3 overloads)
Abs()[const]
Mul(rhs)[const] (+3 overloads)
MulPos(pointVector)[const] (+1 overload)
MulDir(directionVector)[const] (+1 overload)
Mul(vector)[const]
Translate(tx,ty,tz)[static] (+1 overload)
RotateX/Y/Z(...)[static] (+1 overload)
RotateAxisAngle(...)[static] (+1 overload)
RotateFromTo(...)[static] (+1 overload)
RandomGeneral(...)[static]
RotateFromTo(...)[static] (+1 overload)
FromQuat(orientation)[static] (+1 overload)
FromTRS(...)[static] (+3 overloads)
FromEuler***(x2,y,x)[static]
Scale(sx,sy,sz)[static] (+2 overloads)
ScaleAlongAxis(...)[static] (+1 overload)
UniformScale(uniformScale)[static] (+1 overload)
ShearX/Y/Z(yFactor,zFactor)[static]
Mirror(p)[static]
D3DOrthoProjLH(...)[static]
D3DOrthoProjRH(...)[static]
D3DPerspProjLH(...)[static]
D3DPerspProjRH(...)[static]
OpenGLOrthoProjLH(...)[static]
OpenGLOrthoProjRH(...)[static]
OpenGLPerspProjLH(...)[static]
OpenGLPerspProjRH(...)[static]
OrthographicProjection/YZ/XZ/XY(target)[static]
LookAt(...)[static] (+1 overload)

float4x4::InverseColOrthogonal

Syntax

bool float4x4::InverseColOrthogonal(); [6 lines of code]

Inverts a column-orthogonal matrix.

If a matrix is of form M=T*R*S, where T is an affine translation matrix, R is a rotation matrix and S is a diagonal matrix with non-zero but potentially non-uniform scaling factors (possibly mirroring), then the matrix M is column-orthogonal and this function can be used to compute the inverse. Calling this function is faster than the calling the generic matrix Inverse() function. Returns true on success. On failure, the matrix is not modified. This function fails if any of the elements of this vector are not finite, or if the matrix contains a zero scaling factor on X, Y or Z. This function may not be called if this matrix contains any projection (last row differs from (0 0 0 1)).

Note
The returned matrix will be row-orthogonal, but not column-orthogonal in general. The returned matrix will be column-orthogonal iff the original matrix M was row-orthogonal as well. (in which case S had uniform scale, InverseOrthogonalUniformScale() could have been used instead)

Work in progress:

Todo: in bool float4x4::InverseColOrthogonal():
SSE