Computing Transformation Matrices
The FBX SDK and Maya use the same formula to compute a transformation matrix. However,
3ds Max uses a different formula.
NOTE:The FBX importers and exporters for 3ds Max automatically convert transformation matrices
to and from 3ds Max.
FBX and Maya
The following formula represents how the FBX SDK and Maya compute the transformation
matrix for a node:
WorldTransform = ParentWorldTransform * T * Roff * Rp * Rpre * R * Rpost -1 * Rp -1 * Soff * Sp * S * Sp -1
Any given vector is transformed so that V' = WorldTransform * V.
Where the term: |
Is a 4 x 4 matrix that contains: |
WorldTransform
|
Transformation matrix of the node |
ParentWorldTransform
|
Transformation matrix of the parent node |
T
|
Translation |
Roff
|
Rotation offset |
Rp
|
Rotation pivot |
Rpre
|
Pre-rotation |
R
|
Rotation |
Rpost -1
|
Inverse of the post-rotation |
Rp -1
|
Inverse of the rotation pivot |
Soff
|
Scaling offset |
Sp
|
Scaling pivot |
S
|
Scaling |
Sp -1
|
Inverse of the scaling pivot |
Notes:
- The effect of the formula is that any given vector is first scaled, then rotated,
and finally translated.
- The R matrix takes into account the rotation order. Because of the mathematical properties of the matrices, R is the result of one of the possible combinations of Rx, Ry, and Rz (each being matrices). For example, for the default rotation order of XYZ, R = Rz * Ry * Rx.
3ds Max
The following formula represents how 3ds Max computes the transformation matrix for
a node. All the terms in the formula are the same as in FBX and Maya, except for the
three terms that represent geometric transformation:
WorldTransform = ParentWorldTransform * T * R * S * OT * OR * OS
Where the term: |
Is a 4 x 4 matrix that contains: |
WorldTransform
|
Transformation matrix of the node |
ParentWorldTransform
|
Transformation matrix of the parent node |
T
|
Translation |
R
|
Rotation |
S
|
Scaling |
OT
|
Geometric transform translation |
OR
|
Geometric transform rotation |
OS
|
Geometric transform scaling |
Notes:
- Geometric translation, geometric rotation, and geometric scaling relate to the object-offset
concept in 3ds Max. These geometric transformations are applied to the node attribute
after the node transformations.
- Geometric transformations are not inherited: ParentWorldTransform does not contain the OT, OR, and OS of WorldTransform’s parent node.
- Geometric transformations are implemented in the FBX SDK as three properties of the
FbxNode object: FbxNode::GeometricTranslation, FbxNode::GeometricRotation, and FbxNode::GeometricScaling.