Open Inventor Reference
SbMatrix Class Reference

4x4 matrix class. More...

#include <Inventor/SbLinear.h>

List of all members.

Public Member Functions

 SbMatrix ()
 Default constructor.
 SbMatrix (float a11, float a12, float a13, float a14, float a21, float a22, float a23, float a24, float a31, float a32, float a33, float a34, float a41, float a42, float a43, float a44)
 Constructor given all 16 elements in row-major order.
 SbMatrix (const SbMat &m)
 Constructors.
void setValue (const SbMat &m)
 Sets value from 4x4 array of elements.
void setValue (const float *data)
 Sets value from a float array of 16 elements.
void makeIdentity ()
 Sets matrix to be identity.
void setRotate (const SbRotation &q)
 Sets matrix to rotate by given rotation.
void setScale (float s)
 Sets matrix to scale by given uniform factor.
void setScale (const SbVec3f &s)
 Sets matrix to scale by given vector.
void setTranslate (const SbVec3f &t)
 Sets matrix to translate by given vector.
void setTransform (const SbVec3f &translation, const SbRotation &rotation, const SbVec3f &scaleFactor, const SbRotation &scaleOrientation, const SbVec3f &center)
 Composes the matrix based on a translation, rotation, scale, orientation for scale, and center.
void setTransform (const SbVec3f &t, const SbRotation &r, const SbVec3f &s)
 Overloaded methods as a kludge because the compiler won't let us have SbVec3f(0,0,0) as a default value:
void setTransform (const SbVec3f &t, const SbRotation &r, const SbVec3f &s, const SbRotation &so)
void getTransform (SbVec3f &translation, SbRotation &rotation, SbVec3f &scaleFactor, SbRotation &scaleOrientation, const SbVec3f &center) const
 Decomposes the matrix into a translation, rotation, scale, and scale orientation.
void getTransform (SbVec3f &t, SbRotation &r, SbVec3f &s, SbRotation &so) const
void getValue (SbMat &m) const
 The following methods return matrix values and other info:
const SbMatgetValue () const
float det3 (int r1, int r2, int r3, int c1, int c2, int c3) const
 Returns determinant of 3x3 submatrix composed of given row and column indices (0-3 for each).
float det3 () const
 Returns determinant of upper-left 3x3 submatrix.
float det4 () const
 Returns determinant of entire matrix.
SbBool factor (SbMatrix &r, SbVec3f &s, SbMatrix &u, SbVec3f &t, SbMatrix &proj) const
 Factors a matrix m into 5 pieces: m = r s r^ u t, where r^ means transpose of r, and r and u are rotations, s is a scale, and t is a translation.
SbMatrix inverse () const
 Returns inverse of matrix.
SbBool LUDecomposition (int index[4], float &d)
 Perform in-place LU decomposition of matrix.
void LUBackSubstitution (int index[4], float b[4]) const
 Perform back-substitution on LU-decomposed matrix.
SbMatrix transpose () const
 Returns transpose of matrix.
SbMatrixmultRight (const SbMatrix &m)
 Multiplies matrix by given matrix on right or left.
SbMatrixmultLeft (const SbMatrix &m)
 Multiplies matrix by given matrix on right or left.
void multMatrixVec (const SbVec3f &src, SbVec3f &dst) const
 Multiplies matrix by given column vector, giving vector result.
void multVecMatrix (const SbVec3f &src, SbVec3f &dst) const
 Multiplies given row vector by matrix, giving vector result.
void multVecMatrix (const SbVec4f &src, SbVec4f &dst) const
 Multiplies given row vector by matrix, giving vector result. Takes homogenous coordinate and returns homogenous coordinate.
void multVecMatrix (const SbVec3f &src, SbVec4f &dst) const
 Multiplies given row vector by matrix, giving vector result. Takes SbVec4(src,1.f) coordinate and returns homogenous coordinate.
void multDirMatrix (const SbVec3f &src, SbVec3f &dst) const
 Multiplies given row vector by matrix, giving vector result.
void multLineMatrix (const SbLine &src, SbLine &dst) const
 Multiplies the given line's origin by the matrix, and the line's direction by the rotation portion of the matrix.
void print (FILE *fp) const
 Prints a formatted version of the matrix to the given file pointer.
 operator float * ()
 Binary multiplication of matrices.
 operator SbMat & ()
 Cast: returns reference to 4x4 array.
float * operator[] (int i)
 Make it look like a usual matrix (so you can do m[3][2])
const float * operator[] (int i) const
SbMatrixoperator= (const SbMat &m)
 Sets value from 4x4 array of elements.
SbMatrixoperator= (const SbMatrix &m)
 Set the matrix from another SbMatrix.
SbMatrixoperator= (const SbRotation &q)
 Set the matrix from an SbRotation.
SbMatrixoperator*= (const SbMatrix &m)
 Performs right multiplication with another matrix.
SbBool equals (const SbMatrix &m, float tolerance) const
 Equality comparison within given tolerance, for each component.

Static Public Member Functions

static SbMatrix identity ()
 Returns an identity matrix.

Friends

INVENTOR_API SbMatrix operator* (const SbMatrix &m1, const SbMatrix &m2)
 Binary multiplication of matrices.
INVENTOR_API int operator== (const SbMatrix &m1, const SbMatrix &m2)
 Equality comparison operator.
INVENTOR_API int operator!= (const SbMatrix &m1, const SbMatrix &m2)

Detailed Description

4x4 matrix class/datatype used by many Inventor node and action classes. The matrices are stored in row-major order. {}

See Also
SbVec3f, SbRotation

Definition at line 752 of file SbLinear.h.


Constructor & Destructor Documentation

SbMatrix::SbMatrix ( ) [inline]

Definition at line 756 of file SbLinear.h.

SbMatrix::SbMatrix ( float  a11,
float  a12,
float  a13,
float  a14,
float  a21,
float  a22,
float  a23,
float  a24,
float  a31,
float  a32,
float  a33,
float  a34,
float  a41,
float  a42,
float  a43,
float  a44 
)
SbMatrix::SbMatrix ( const SbMat m)

Member Function Documentation

float SbMatrix::det3 ( int  r1,
int  r2,
int  r3,
int  c1,
int  c2,
int  c3 
) const
float SbMatrix::det3 ( ) const [inline]

Definition at line 841 of file SbLinear.h.

References det3().

Referenced by det3().

float SbMatrix::det4 ( ) const
SbBool SbMatrix::equals ( const SbMatrix m,
float  tolerance 
) const
SbBool SbMatrix::factor ( SbMatrix r,
SbVec3f s,
SbMatrix u,
SbVec3f t,
SbMatrix proj 
) const

Any projection information is returned in proj. NOTE: the projection matrix is always set to identity.

void SbMatrix::getTransform ( SbVec3f translation,
SbRotation rotation,
SbVec3f scaleFactor,
SbRotation scaleOrientation,
const SbVec3f center 
) const

Any projection information is discarded. The decomposition depends upon choice of center point for rotation and scaling, which is optional as the last parameter. Note that if the center is 0, decompose() is the same as factor() where "t" is translation, "u" is rotation, "s" is scaleFactor, and "r" is ScaleOrientattion.

void SbMatrix::getTransform ( SbVec3f t,
SbRotation r,
SbVec3f s,
SbRotation so 
) const [inline]

Definition at line 825 of file SbLinear.h.

References getTransform().

Referenced by getTransform().

void SbMatrix::getValue ( SbMat m) const

Returns 4x4 array of elements

const SbMat& SbMatrix::getValue ( ) const [inline]

Definition at line 834 of file SbLinear.h.

static SbMatrix SbMatrix::identity ( ) [static]
SbMatrix SbMatrix::inverse ( ) const

Results are undefined for singular matrices. Uses LU decomposition.

void SbMatrix::LUBackSubstitution ( int  index[4],
float  b[4] 
) const

Index is permutation of rows from original matrix.

SbBool SbMatrix::LUDecomposition ( int  index[4],
float &  d 
)

index is index of rows in matrix. d is the parity of row swaps. Returns FALSE if singular.

void SbMatrix::makeIdentity ( )
void SbMatrix::multDirMatrix ( const SbVec3f src,
SbVec3f dst 
) const

src is assumed to be a direction vector, so translation part of matrix is ignored. Note: if you wish to transform surface points and normals by a matrix, call multVecMatrix() for the points and call multDirMatrix() on the inverse transpose of the matrix for the normals.

SbMatrix& SbMatrix::multLeft ( const SbMatrix m)
void SbMatrix::multLineMatrix ( const SbLine src,
SbLine dst 
) const
void SbMatrix::multMatrixVec ( const SbVec3f src,
SbVec3f dst 
) const
SbMatrix& SbMatrix::multRight ( const SbMatrix m)
void SbMatrix::multVecMatrix ( const SbVec3f src,
SbVec4f dst 
) const
void SbMatrix::multVecMatrix ( const SbVec3f src,
SbVec3f dst 
) const
void SbMatrix::multVecMatrix ( const SbVec4f src,
SbVec4f dst 
) const
SbMatrix::operator float * ( ) [inline]

Definition at line 902 of file SbLinear.h.

SbMatrix::operator SbMat & ( ) [inline]

Definition at line 905 of file SbLinear.h.

SbMatrix& SbMatrix::operator*= ( const SbMatrix m) [inline]

Definition at line 921 of file SbLinear.h.

SbMatrix& SbMatrix::operator= ( const SbRotation q) [inline]

Definition at line 918 of file SbLinear.h.

SbMatrix& SbMatrix::operator= ( const SbMatrix m)
SbMatrix& SbMatrix::operator= ( const SbMat m)
const float* SbMatrix::operator[] ( int  i) const [inline]

Definition at line 909 of file SbLinear.h.

float* SbMatrix::operator[] ( int  i) [inline]

Definition at line 908 of file SbLinear.h.

void SbMatrix::print ( FILE *  fp) const
void SbMatrix::setRotate ( const SbRotation q)
void SbMatrix::setScale ( float  s)
void SbMatrix::setScale ( const SbVec3f s)
void SbMatrix::setTransform ( const SbVec3f t,
const SbRotation r,
const SbVec3f s 
) [inline]

Definition at line 805 of file SbLinear.h.

References setTransform().

Referenced by setTransform().

void SbMatrix::setTransform ( const SbVec3f t,
const SbRotation r,
const SbVec3f s,
const SbRotation so 
) [inline]

Definition at line 809 of file SbLinear.h.

References setTransform().

Referenced by setTransform().

void SbMatrix::setTransform ( const SbVec3f translation,
const SbRotation rotation,
const SbVec3f scaleFactor,
const SbRotation scaleOrientation,
const SbVec3f center 
)

The "center" is the center point for scaling and rotation. The "scaleOrientation" chooses the primary axes for the scale.

void SbMatrix::setTranslate ( const SbVec3f t)
void SbMatrix::setValue ( const float *  data)
void SbMatrix::setValue ( const SbMat m)
SbMatrix SbMatrix::transpose ( ) const

Friends And Related Function Documentation

INVENTOR_API int operator!= ( const SbMatrix m1,
const SbMatrix m2 
) [friend]

Definition at line 928 of file SbLinear.h.

INVENTOR_API SbMatrix operator* ( const SbMatrix m1,
const SbMatrix m2 
) [friend]
INVENTOR_API int operator== ( const SbMatrix m1,
const SbMatrix m2 
) [friend]

The documentation for this class was generated from the following file: