fbmath.h File Reference

This reference page is linked to from the following overview topics: MotionBuilder 2014, Your First Python Program, Utility Classes.


Contains routines for vector and matrix manipulation. More...

#include <kaydaradef.h>
#include <fbsdk/fbtypes.h>

Go to the source code of this file.

Defines

#define FBSDK_DLL   K_DLLIMPORT
 Be sure that FBSDK_DLL is defined only once...

Enumerations

enum  FBRotationOrder {
  kFBXYZ, kFBXZY, kFBYXZ, kFBYZX,
  kFBZXY, kFBZYX
}
 

Specify the Euler rotation order.

More...

Functions

 FB_DEFINE_ENUM (FBSDK_DLL, RotationOrder)
FBSDK_DLL void FBMatrixInverse (FBMatrix &pMatrix, const FBMatrix &pSrc)
 Invert a matrix.
FBSDK_DLL void FBMatrixTranspose (FBMatrix &pMatrix, const FBMatrix &pSrc)
 Transpose a matrix.
FBSDK_DLL void FBMatrixMult (FBMatrix &pMatrix, const FBMatrix &pA, const FBMatrix &pB)
 Multiply two matrices.
FBSDK_DLL void FBVertexMatrixMult (FBVertex &pOutVertex, const FBMatrix &pMatrix, const FBVertex &pVertex)
 Multiply a vertex by a matrix.
FBSDK_DLL void FBVectorMatrixMult (FBVector4d &pOutVector, const FBMatrix &pMatrix, const FBVector4d &pVector)
 Multiply a vector by a matrix.
FBSDK_DLL void FBTranslationToMatrix (FBMatrix &pMatrix, const FBTVector &pVector)
 Convert a translation vector to a matrix.
FBSDK_DLL void FBRotationToMatrix (FBMatrix &pMatrix, const FBRVector &pVector, FBRotationOrder pRotationOrder=kFBXYZ)
 Convert a rotation vector to a matrix.
FBSDK_DLL void FBScalingToMatrix (FBMatrix &pMatrix, const FBSVector &pVector)
 Convert a scaling vector to a matrix.
FBSDK_DLL void FBTRSToMatrix (FBMatrix &pMatrix, const FBTVector &pTVector, const FBRVector &pRVector, const FBSVector &pSVector)
 Convert translation, rotation, and scaling vectors to a matrix.
FBSDK_DLL void FBMatrixToTranslation (FBTVector &pVector, const FBMatrix &pMatrix)
 Obtain translation vector from a matrix.
FBSDK_DLL void FBMatrixToRotation (FBRVector &pVector, const FBMatrix &pMatrix, FBRotationOrder pRotationOrder=kFBXYZ)
 Obtain rotation vector from a matrix.
FBSDK_DLL void FBMatrixToScaling (FBSVector &pVector, const FBMatrix &pMatrix)
 Obtain scaling vector from a matrix.
FBSDK_DLL void FBMatrixToTRS (FBTVector &pTVector, FBRVector &pRVector, FBSVector &pSVector, const FBMatrix &pMatrix)
 Obtain translation, rotation, and scaling vectors from a matrix.
FBSDK_DLL void FBRotationToQuaternion (FBQuaternion &pQuaternion, const FBRVector &pVector, FBRotationOrder pRotationOrder=kFBXYZ)
 Get a quaternion from a rotation vector.
FBSDK_DLL void FBQuaternionToRotation (FBRVector &pVector, const FBQuaternion &pQuaternion, FBRotationOrder pRotationOrder=kFBXYZ)
 Get a rotation vector from a quaternion vector.
FBSDK_DLL void FBMatrixToQuaternion (FBQuaternion &pQuaternion, const FBMatrix &pMatrix)
 Get a quaternion from a matrix (potential ).
FBSDK_DLL void FBQuaternionToMatrix (FBMatrix &pMatrix, const FBQuaternion &pQuaternion)
 Get a rotation matrix from a quaternion vector.
FBSDK_DLL void FBGetLocalMatrix (FBMatrix &pMatrix, const FBMatrix &pMatrixParent, const FBMatrix &pMatrixChild)
 Get local matrix from parent and child matrices.
FBSDK_DLL void FBGetGlobalMatrix (FBMatrix &pMatrix, const FBMatrix &pMatrixParent, const FBMatrix &pLocalMatrix)
 Get global matrix from parent and child matrices.
FBSDK_DLL void FBMatrixOrthogonalize (FBMatrix &pMatrix)
 Make sure that rotation vectors are orthogonal and normalized (fast way for removing scaling from matrix)
FBSDK_DLL void FBAdd (FBTVector &pResult, const FBTVector &pV1, const FBTVector &pV2)
 Add two vectors together (pResult = pV1 + pV2)
FBSDK_DLL void FBSub (FBTVector &pResult, const FBTVector &pV1, const FBTVector &pV2)
 Subtract pV2 from pV1 (pResult = pV1 - pV2)
FBSDK_DLL void FBMult (FBTVector &pResult, const FBTVector &pV1, double pV2)
 Multiply pV2 from pV1 (pResult = pV1 * pV2)
FBSDK_DLL void FBMult (FBTVector &pResult, const FBTVector &pV1, const FBTVector &pV2)
 Calculate the cross product of two vectors.
FBSDK_DLL void FBMult (FBMatrix &pResult, const FBMatrix &pM, const FBSVector &pV)
 Calculate the cross product of a Matrix and Scale Vector.
FBSDK_DLL double FBDot (const FBTVector &pV1, const FBTVector &pV2)
 Calculate the dot product of two vectors.
FBSDK_DLL double FBLength (const FBTVector &pV)
 Get the length of a vector.
FBSDK_DLL void FBQAdd (FBQuaternion &pResult, const FBQuaternion &pQ1, const FBQuaternion &pQ2)
 Add two quaternions together (pResult = pQ1 + pQ2)
FBSDK_DLL void FBQSub (FBQuaternion &pResult, const FBQuaternion &pQ1, const FBQuaternion &pQ2)
 Subtract pQ2 from pQ1 (pResult = pQ1 - pQ2)
FBSDK_DLL void FBQMult (FBQuaternion &pResult, const FBQuaternion &pQ1, double pQ2)
 Multiply pQ2 from pQ1 (pResult = pQ1 * pQ2)
FBSDK_DLL void FBQMult (FBQuaternion &pResult, const FBQuaternion &pQ1, const FBQuaternion &pQ2)
 Calculate the cross product of two quaternions.
FBSDK_DLL double FBQDot (const FBQuaternion &pQ1, const FBQuaternion &pQ2)
 Calculate the dot product of two quaternions.
FBSDK_DLL double FBQLength (const FBQuaternion &pQ)
 Get the length of a quaternion.
FBSDK_DLL double FBLength (const FBVertex &pV)
 Get the length of a vertex (from origin)
FBSDK_DLL void FBInterpolateRotation (FBRVector &pROut, const FBRVector &pR0, const FBRVector &pR1, double pU)
 Interpolate a rotation in Euler space.
FBSDK_DLL void FBInterpolateRotation (FBQuaternion &pQOut, const FBQuaternion &pQ0, const FBQuaternion &pQ1, double pU)
 Interpolate a rotation in Quaternion.
FBSDK_DLL void FBGetContinuousRotation (FBRVector &pROut, const FBRVector &pR0, const FBRVector &pR1)
 Get a continuous rotation in Euler space.
FBSDK_DLL double FBClamp (double pV, double pL, double pH)
 Clamp value.
FBSDK_DLL void FBBigEndianToNative (unsigned short &pV)
 Change from big endian to native format.
FBSDK_DLL void FBLittleEndianToNative (unsigned short &pV)
 Change from little endian to native format.

Detailed Description

Contains routines for vector and matrix manipulation.

Definition in file fbmath.h.


Define Documentation

#define FBSDK_DLL   K_DLLIMPORT

Be sure that FBSDK_DLL is defined only once...

Definition at line 48 of file fbmath.h.


Enumeration Type Documentation

Specify the Euler rotation order.

Enumerator:
kFBXYZ 

XYZ.

kFBXZY 

XZY.

kFBYXZ 

YXZ.

kFBYZX 

YZX.

kFBZXY 

ZXY.

kFBZYX 

ZYX.

Definition at line 58 of file fbmath.h.


Function Documentation

FB_DEFINE_ENUM ( FBSDK_DLL  ,
RotationOrder   
)
FBSDK_DLL void FBMatrixInverse ( FBMatrix pMatrix,
const FBMatrix pSrc 
)

Invert a matrix.

Return values:
pMatrixCalculated inverse matrix.
Parameters:
pSrcSource matrix to invert.
FBSDK_DLL void FBMatrixTranspose ( FBMatrix pMatrix,
const FBMatrix pSrc 
)

Transpose a matrix.

Return values:
pMatrixCalculated transpose matrix.
Parameters:
pSrcSource matrix to transpose.
FBSDK_DLL void FBMatrixMult ( FBMatrix pMatrix,
const FBMatrix pA,
const FBMatrix pB 
)

Multiply two matrices.

Return values:
pMatrixCalculated resulting matrix.
Parameters:
pA1st matrix.
pB2nd matrix.
FBSDK_DLL void FBVertexMatrixMult ( FBVertex pOutVertex,
const FBMatrix pMatrix,
const FBVertex pVertex 
)

Multiply a vertex by a matrix.

Return values:
pOutVertexResulting vertex.
Parameters:
pMatrixMatrix to affect the vertex with.
pVertexSource vertex.
FBSDK_DLL void FBVectorMatrixMult ( FBVector4d pOutVector,
const FBMatrix pMatrix,
const FBVector4d pVector 
)

Multiply a vector by a matrix.

Return values:
pOutVectorResulting vector.
Parameters:
pMatrixMatrix to affect the vector with.
pVectorSource vector.
FBSDK_DLL void FBTranslationToMatrix ( FBMatrix pMatrix,
const FBTVector pVector 
)

Convert a translation vector to a matrix.

Return values:
pMatrixCalculated resulting matrix.
Parameters:
pVectorTranslation vector.
FBSDK_DLL void FBRotationToMatrix ( FBMatrix pMatrix,
const FBRVector pVector,
FBRotationOrder  pRotationOrder = kFBXYZ 
)

Convert a rotation vector to a matrix.

Return values:
pMatrixCalculated resulting matrix.
Parameters:
pVectorRotation vector.
pRotationOrderRotation order
FBSDK_DLL void FBScalingToMatrix ( FBMatrix pMatrix,
const FBSVector pVector 
)

Convert a scaling vector to a matrix.

Return values:
pMatrixCalculated resulting matrix.
Parameters:
pVectorScaling vector.
FBSDK_DLL void FBTRSToMatrix ( FBMatrix pMatrix,
const FBTVector pTVector,
const FBRVector pRVector,
const FBSVector pSVector 
)

Convert translation, rotation, and scaling vectors to a matrix.

Return values:
pMatrixCalculated resulting matrix.
Parameters:
pTVectorTranslation vector.
pRVectorRotation vector.
pSVectorScaling vector.
Warning:
Rotation is in EulerXYZ
FBSDK_DLL void FBMatrixToTranslation ( FBTVector pVector,
const FBMatrix pMatrix 
)

Obtain translation vector from a matrix.

Return values:
pVectorExtracted translation vector.
Parameters:
pMatrixInput matrix.
FBSDK_DLL void FBMatrixToRotation ( FBRVector pVector,
const FBMatrix pMatrix,
FBRotationOrder  pRotationOrder = kFBXYZ 
)

Obtain rotation vector from a matrix.

Return values:
pVectorExtracted rotation vector.
Parameters:
pMatrixInput matrix.
pRotationOrderRotation Order.
Warning:
Rotation is in EulerXYZ or EulerZYX only
FBSDK_DLL void FBMatrixToScaling ( FBSVector pVector,
const FBMatrix pMatrix 
)

Obtain scaling vector from a matrix.

Return values:
pVectorExtracted scaling vector.
Parameters:
pMatrixInput matrix.
FBSDK_DLL void FBMatrixToTRS ( FBTVector pTVector,
FBRVector pRVector,
FBSVector pSVector,
const FBMatrix pMatrix 
)

Obtain translation, rotation, and scaling vectors from a matrix.

Return values:
pTVectorExtracted translation vector.
pRVectorExtracted rotation vector.
pSVectorExtracted scaling vector.
Parameters:
pMatrixInput matrix.
Warning:
Rotation is in EulerXYZ
FBSDK_DLL void FBRotationToQuaternion ( FBQuaternion pQuaternion,
const FBRVector pVector,
FBRotationOrder  pRotationOrder = kFBXYZ 
)

Get a quaternion from a rotation vector.

Return values:
pQuaternionCalculated quaternion.
Parameters:
pVectorInput rotation vector.
pRotationOrderRotation order of the rotation vector.
FBSDK_DLL void FBQuaternionToRotation ( FBRVector pVector,
const FBQuaternion pQuaternion,
FBRotationOrder  pRotationOrder = kFBXYZ 
)

Get a rotation vector from a quaternion vector.

Return values:
pVectorCalculated rotation vector.
Parameters:
pQuaternionInput quaternion.
pRotationOrderRotation order of the rotation vector.
Warning:
Rotation is in EulerXYZ or kFBZYX only
FBSDK_DLL void FBMatrixToQuaternion ( FBQuaternion pQuaternion,
const FBMatrix pMatrix 
)

Get a quaternion from a matrix (potential ).

Return values:
pQuaternionCalculated quaternion.
Parameters:
pMatrixInput matrix.
Warning:
Matrix can contain scaling and/or translation, we orthogonalize matrix before.
FBSDK_DLL void FBQuaternionToMatrix ( FBMatrix pMatrix,
const FBQuaternion pQuaternion 
)

Get a rotation matrix from a quaternion vector.

Return values:
pMatrixCalculated rotation matrix.
Parameters:
pQuaternionInput quaternion.
FBSDK_DLL void FBGetLocalMatrix ( FBMatrix pMatrix,
const FBMatrix pMatrixParent,
const FBMatrix pMatrixChild 
)

Get local matrix from parent and child matrices.

Will calculate the local matrix from two global matrices. The resulting matrix will be a local matrix containing the local transformations to go from the parent referentialto the child referential.

Return values:
pMatrixCalculated local matrix.
Parameters:
pMatrixParentParent matrix (new base referential).
pMatrixChildChild matrix.
FBSDK_DLL void FBGetGlobalMatrix ( FBMatrix pMatrix,
const FBMatrix pMatrixParent,
const FBMatrix pLocalMatrix 
)

Get global matrix from parent and child matrices.

From an input referential, this function will calculate the global matrix corresponding to the input local matrix (which is with respect to the parent matrix).

Return values:
pMatrixCalculated local matrix.
Parameters:
pMatrixParentParent matrix.
pLocalMatrixLocal matrix.
FBSDK_DLL void FBMatrixOrthogonalize ( FBMatrix pMatrix)

Make sure that rotation vectors are orthogonal and normalized (fast way for removing scaling from matrix)

Return values:
pMatrixOrthogonalized matrix.
Parameters:
pMatrixRotation Matrix to Orthogonalize.
FBSDK_DLL void FBAdd ( FBTVector pResult,
const FBTVector pV1,
const FBTVector pV2 
)

Add two vectors together (pResult = pV1 + pV2)

Return values:
pResultResulting vector.
Parameters:
pV11st vector.
pV22nd vector.
FBSDK_DLL void FBSub ( FBTVector pResult,
const FBTVector pV1,
const FBTVector pV2 
)

Subtract pV2 from pV1 (pResult = pV1 - pV2)

Return values:
pResultResulting vector.
Parameters:
pV11st vector.
pV22nd vector.
FBSDK_DLL void FBMult ( FBTVector pResult,
const FBTVector pV1,
double  pV2 
)

Multiply pV2 from pV1 (pResult = pV1 * pV2)

Return values:
pResultResulting vector.
Parameters:
pV11st vector.
pV22nd vector.
FBSDK_DLL void FBMult ( FBTVector pResult,
const FBTVector pV1,
const FBTVector pV2 
)

Calculate the cross product of two vectors.

Return values:
pResultResulting vector.
Parameters:
pV11st vector.
pV22nd vector.
FBSDK_DLL void FBMult ( FBMatrix pResult,
const FBMatrix pM,
const FBSVector pV 
)

Calculate the cross product of a Matrix and Scale Vector.

Return values:
pResultResulting Matrix.
Parameters:
pMMatrix.
pVvector.
FBSDK_DLL double FBDot ( const FBTVector pV1,
const FBTVector pV2 
)

Calculate the dot product of two vectors.

Parameters:
pV11st vector.
pV22nd vector.
Returns:
Dot product.
FBSDK_DLL double FBLength ( const FBTVector pV)

Get the length of a vector.

Parameters:
pVVector to calculate length for.
Returns:
Length of vector pV.
FBSDK_DLL void FBQAdd ( FBQuaternion pResult,
const FBQuaternion pQ1,
const FBQuaternion pQ2 
)

Add two quaternions together (pResult = pQ1 + pQ2)

Return values:
pResultResulting quaternion.
Parameters:
pQ11st quaternion.
pQ22nd quaternion.
FBSDK_DLL void FBQSub ( FBQuaternion pResult,
const FBQuaternion pQ1,
const FBQuaternion pQ2 
)

Subtract pQ2 from pQ1 (pResult = pQ1 - pQ2)

Return values:
pResultResulting quaternion.
Parameters:
pQ11st quaternion.
pQ22nd quaternion.
FBSDK_DLL void FBQMult ( FBQuaternion pResult,
const FBQuaternion pQ1,
double  pQ2 
)

Multiply pQ2 from pQ1 (pResult = pQ1 * pQ2)

Return values:
pResultResulting quaternion.
Parameters:
pQ11st quaternion.
pQ22nd quaternion.
FBSDK_DLL void FBQMult ( FBQuaternion pResult,
const FBQuaternion pQ1,
const FBQuaternion pQ2 
)

Calculate the cross product of two quaternions.

Return values:
pResultResulting quaternion.
Parameters:
pQ11st quaternion.
pQ22nd quaternion.
FBSDK_DLL double FBQDot ( const FBQuaternion pQ1,
const FBQuaternion pQ2 
)

Calculate the dot product of two quaternions.

Parameters:
pQ11st quaternion.
pQ22nd quaternion.
Returns:
Dot product.
FBSDK_DLL double FBQLength ( const FBQuaternion pQ)

Get the length of a quaternion.

Parameters:
pQQuaternion to calculate length for.
Returns:
Length of quaternion pQ.
FBSDK_DLL double FBLength ( const FBVertex pV)

Get the length of a vertex (from origin)

Parameters:
pVVertex for which length is to be measured.
Returns:
Length of vertex (from origin).
FBSDK_DLL void FBInterpolateRotation ( FBRVector pROut,
const FBRVector pR0,
const FBRVector pR1,
double  pU 
)

Interpolate a rotation in Euler space.

Return values:
pROutResulting, interpolated rotation.
Parameters:
pR01st rotation.
pR12nd rotation.
pUInterpolation ratio.
FBSDK_DLL void FBInterpolateRotation ( FBQuaternion pQOut,
const FBQuaternion pQ0,
const FBQuaternion pQ1,
double  pU 
)

Interpolate a rotation in Quaternion.

Return values:
pQOutResulting, interpolated rotation.
Parameters:
pQ01st rotation.
pQ12nd rotation.
pUInterpolation ratio.
FBSDK_DLL void FBGetContinuousRotation ( FBRVector pROut,
const FBRVector pR0,
const FBRVector pR1 
)

Get a continuous rotation in Euler space.

This routine will help to avoid gimble locks due to interpolation.

Return values:
pROutSuccessful continuous rotation (gimble-lock free).
Parameters:
pR0Suggested next rotation.
pR1Previous rotation.
FBSDK_DLL double FBClamp ( double  pV,
double  pL,
double  pH 
)

Clamp value.

Parameters:
pVValue to clamp.
pLLow limit.
pHHigh limit.
Returns:
Clamped value.
FBSDK_DLL void FBBigEndianToNative ( unsigned short &  pV)

Change from big endian to native format.

Parameters:
pVValue to modify.
FBSDK_DLL void FBLittleEndianToNative ( unsigned short &  pV)

Change from little endian to native format.

Parameters:
pVValue to modify.