|
| Matrix4 () |
|
| Matrix4 (Real m00, Real m01, Real m02, Real m03, Real m10, Real m11, Real m12, Real m13, Real m20, Real m21, Real m22, Real m23, Real m30, Real m31, Real m32, Real m33) |
|
| Matrix4 (const Matrix3 &m3x3) |
|
| Matrix4 (const Quaternion &rot) |
|
void | swap (Matrix4 &other) |
|
Real * | operator[] (size_t iRow) |
|
const Real * | operator[] (size_t iRow) const |
|
Matrix4 | concatenate (const Matrix4 &m2) const |
|
Matrix4 | operator* (const Matrix4 &m2) const |
|
Vector3 | operator* (const Vector3 &v) const |
|
Vector4 | operator* (const Vector4 &v) const |
|
Matrix4 | operator+ (const Matrix4 &m2) const |
|
Matrix4 | operator- (const Matrix4 &m2) const |
|
bool | operator== (const Matrix4 &m2) const |
|
bool | operator!= (const Matrix4 &m2) const |
|
void | operator= (const Matrix3 &mat3) |
|
Matrix4 | transpose (void) const |
|
void | setTrans (const Vector3 &v) |
|
Vector3 | getTrans () const |
|
void | makeTrans (const Vector3 &v) |
|
void | makeTrans (Real tx, Real ty, Real tz) |
|
void | setScale (const Vector3 &v) |
|
void | extract3x3Matrix (Matrix3 &m3x3) const |
|
bool | hasScale () const |
|
bool | hasNegativeScale () const |
|
Quaternion | extractQuaternion () const |
|
Matrix4 | operator* (Real scalar) const |
|
Matrix4 | adjoint () const |
|
Real | determinant () const |
|
Matrix4 | inverse () const |
|
void | makeTransform (const Vector3 &position, const Vector3 &scale, const Quaternion &orientation) |
|
void | makeInverseTransform (const Vector3 &position, const Vector3 &scale, const Quaternion &orientation) |
|
void | decomposition (Vector3 &position, Vector3 &scale, Quaternion &orientation) const |
|
bool | isAffine (void) const |
|
Matrix4 | inverseAffine (void) const |
|
Matrix4 | concatenateAffine (const Matrix4 &m2) const |
|
Vector3 | transformAffine (const Vector3 &v) const |
|
Class encapsulating a standard 4x4 homogeneous matrix.
- The use of column vectors and right-to-left ordering is the standard in most mathematical texts, and is the same as used in OpenGL. It is, however, the opposite of Direct3D, which has inexplicably chosen to differ from the accepted standard and uses row vectors and left-to-right matrix multiplication.
- OGRE deals with the differences between D3D and OpenGL etc. internally when operating through different render systems. OGRE users only need to conform to standard maths conventions, i.e. right-to-left matrix multiplication, (OGRE transposes matrices it passes to D3D to compensate).
- The generic form M * V which shows the layout of the matrix entries is shown below:
[ m[0][0] m[0][1] m[0][2] m[0][3] ] {x}
| m[1][0] m[1][1] m[1][2] m[1][3] | * {y}
| m[2][0] m[2][1] m[2][2] m[2][3] | {z}
[ m[3][0] m[3][1] m[3][2] m[3][3] ] {1}