A 3x3 transformation matrix. More...
Public Member Functions | |
float * | operator[] (int i) |
const float * | operator[] (int i) const |
const float * | array () const |
Matrix3 (float a, float b, float c, float d, float e, float f, float g, float h, float i) | |
void | set (float a, float b, float c, float d, float e, float f, float g, float h, float i) |
Matrix3 | operator* (const Matrix3 &) const |
Matrix3 & | operator*= (const Matrix3 &) |
Matrix3 | operator+ (const Matrix3 &) const |
Matrix3 & | operator+= (const Matrix3 &) |
Matrix3 | operator- (const Matrix3 &) const |
Matrix3 & | operator-= (const Matrix3 &) |
Matrix3 | operator* (float) const |
Matrix3 & | operator*= (float) |
Matrix3 | operator/ (float d) const |
Matrix3 & | operator/= (float d) |
Vector3 | operator* (const Vector3 &v) const |
Vector3 | transform (const Vector3 &v) const |
bool | operator!= (const Matrix3 &b) const |
bool | operator== (const Matrix3 &b) const |
float | determinant () const |
Matrix3 | inverse (float det) const |
Matrix3 | inverse () const |
void | makeIdentity () |
void | scaling (float) |
void | scaling (float, float, float) |
void | scaling (const Vector3 &v) |
void | rotationX (float) |
void | rotationY (float) |
void | rotationZ (float) |
void | rotation (float a) |
void | rotation (float a, float x, float y, float z) |
void | rotation (float a, const Vector3 &v) |
void | scale (float) |
void | scale (float, float, float=1) |
void | scale (const Vector3 &v) |
void | rotateX (float) |
void | rotateY (float) |
void | rotateZ (float) |
void | rotate (float a) |
void | rotate (float a, float x, float y, float z) |
void | rotate (float a, const Vector3 &v) |
void | skew (float a) |
void | append (Hash &) const |
Static Public Member Functions | |
static const Matrix3 & | identity () |
Public Attributes | |
float | a00 |
float | a10 |
float | a20 |
float | a01 |
float | a11 |
float | a21 |
float | a02 |
float | a12 |
float | a22 |
Static Public Attributes | |
static const Matrix3 | _identity |
Friends | |
std::ostream & | operator<< (std::ostream &o, const Matrix3 &matrix) |
A 3x3 transformation matrix.
You multiply a Vector3 by one of these to go from one 3D space to another. This cannot represent 3D translations or perspective, use a Matrix4 for that. This is also often used to transform color spaces.
The data is stored packed together in OpenGL order, which is transposed from the way used in most modern graphics literature. This affects how the array() and [] operator work, these are all equal:
DD::Image::Matrix3::Matrix3 | ( | float | a, |
float | b, | ||
float | c, | ||
float | d, | ||
float | e, | ||
float | f, | ||
float | g, | ||
float | h, | ||
float | i | ||
) | [inline] |
Initialize with a00=a, a01=b, a02=c, etc, ie the arguments are given as rows.
float * DD::Image::Matrix3::operator[] | ( | int | i | ) | [inline] |
Return a pointer to the column number i.
const float * DD::Image::Matrix3::operator[] | ( | int | i | ) | const [inline] |
Return a pointer to the column number i.
const float * DD::Image::Matrix3::array | ( | ) | const [inline] |
Return a pointer to a00. This array is in the correct order to send it to OpenGL.
Matrix3 Matrix3::operator* | ( | float | f | ) | const |
Multiplies every location by f.
Matrix3 & Matrix3::operator*= | ( | float | f | ) |
Multiplies every location by f.
Returns the transformation of v by this matrix.
bool DD::Image::Matrix3::operator!= | ( | const Matrix3 & | b | ) | const [inline] |
Returns true if any of all 9 locations are different.
bool DD::Image::Matrix3::operator== | ( | const Matrix3 & | b | ) | const [inline] |
Returns true if all 9 locations are equal.
float DD::Image::Matrix3::determinant | ( | void | ) | const [inline] |
Return the determinant. Non-zero means the transformation can be inverted.
Matrix3 Matrix3::inverse | ( | float | det | ) | const |
Returns the inverse of this matrix where det is the precomputed determinant. This is useful if you already computed the determinant in order to see if you can invert the matrix.
Matrix3 DD::Image::Matrix3::inverse | ( | ) | const [inline] |
Returns the inverse of this matrix. If determinant() is zero this will replace all the items with +/- infinity or zero.
References inverse().
Referenced by inverse().
void DD::Image::Matrix3::makeIdentity | ( | ) | [inline] |
Replace the contents with the identity.
void Matrix3::scaling | ( | float | x | ) |
Replace the contents with a uniform scale by x.
void Matrix3::scaling | ( | float | x, |
float | y, | ||
float | z | ||
) |
Replace the contents with a scale by x,y,z.
void DD::Image::Matrix3::scaling | ( | const Vector3 & | v | ) | [inline] |
void Matrix3::rotationX | ( | float | angle | ) |
Replace the contents with a rotation by angle (in radians) around the X axis.
Referenced by rotateX().
void Matrix3::rotationY | ( | float | angle | ) |
Replace the contents with a rotation by angle (in radians) around the Y axis.
Referenced by rotateY().
void Matrix3::rotationZ | ( | float | angle | ) |
Replace the contents with a rotation by angle (in radians) around the Z axis.
Referenced by rotateZ().
void DD::Image::Matrix3::rotation | ( | float | angle | ) | [inline] |
Same as rotationZ(angle).
Referenced by rotate().
void Matrix3::rotation | ( | float | a, |
float | x, | ||
float | y, | ||
float | z | ||
) |
Replace the contents with a rotation by angle (in radians) around the vector x,y,z.
void DD::Image::Matrix3::rotation | ( | float | angle, |
const Vector3 & | v | ||
) | [inline] |
Replace the contents with a rotation by angle (in radians) around the vector.
References rotation().
Referenced by rotation().
void Matrix3::scale | ( | float | s | ) |
Scale the transformation by s.
void Matrix3::scale | ( | float | x, |
float | y, | ||
float | z = 1 |
||
) |
Scale the transformation by x,y,z.
void DD::Image::Matrix3::scale | ( | const Vector3 & | v | ) | [inline] |
void Matrix3::rotateX | ( | float | a | ) |
Rotate the transformation by a radians about the X axis.
References rotationX().
void Matrix3::rotateY | ( | float | a | ) |
Rotate the transformation by a radians about the Y axis.
References rotationY().
void Matrix3::rotateZ | ( | float | a | ) |
Rotate the transformation by a radians about the Z axis.
References rotationZ().
void DD::Image::Matrix3::rotate | ( | float | a | ) | [inline] |
Same as rotateZ(a).
void Matrix3::rotate | ( | float | a, |
float | x, | ||
float | y, | ||
float | z | ||
) |
Rotate the transformation by a radians about the vector x,y,z.
References rotation().
void DD::Image::Matrix3::rotate | ( | float | a, |
const Vector3 & | v | ||
) | [inline] |
void Matrix3::skew | ( | float | a | ) |
Skew the transformation by a (X positions have a*Y added to them).
std::ostream& operator<< | ( | std::ostream & | o, |
const Matrix3 & | matrix | ||
) | [friend] |
Writes it in nuke/tcl notation, with nested curly braces