AI_TMatrix44SSE Class Reference
[Mathematics]
#include <AI_TMatrix44_sse.h>
Detailed Description
SSE based AI_Matrix44 class.(C) 2002 RadonLabs GmbH
Public Member Functions | |
AI_TMatrix44SSE () | |
constructor 1 | |
AI_TMatrix44SSE (const AI_TVector4SSE &v1, const AI_TVector4SSE &v2, const AI_TVector4SSE &v3, const AI_TVector4SSE &v4) | |
constructor 2 | |
AI_TMatrix44SSE (const AI_TMatrix44SSE &m1) | |
constructor 3 | |
AI_TMatrix44SSE (float _m11, float _m12, float _m13, float _m14, float _m21, float _m22, float _m23, float _m24, float _m31, float _m32, float _m33, float _m34, float _m41, float _m42, float _m43, float _m44) | |
constructor 4 | |
AI_TMatrix44SSE (const AI_Quaternion &q) | |
construct from AI_Quaternion | |
AI_TMatrix44SSE (const __m128 &_m1, const __m128 &_m2, const __m128 &_m3, const __m128 &_m4) | |
construct from sse variables | |
AI_Quaternion | get_quaternion () const |
convert to AI_Quaternion | |
void | set (const AI_TVector4SSE &v1, const AI_TVector4SSE &v2, const AI_TVector4SSE &v3, const AI_TVector4SSE &v4) |
set 1 | |
void | set (const AI_TMatrix44SSE &m1) |
set 2 | |
void | set (float _m11, float _m12, float _m13, float _m14, float _m21, float _m22, float _m23, float _m24, float _m31, float _m32, float _m33, float _m34, float _m41, float _m42, float _m43, float _m44) |
set 3 | |
void | set (const AI_Quaternion &q) |
set from AI_Quaternion | |
void | ident () |
set to identity | |
void | transpose () |
transpose | |
float | det () |
determinant | |
void | invert (void) |
full invert | |
void | invert_simple (void) |
quick invert (if 3x3 rotation and translation) | |
void | mult_simple (const AI_TMatrix44SSE &m1) |
quick multiplication, assumes that m[0][3]==m[1][3]==m[2][3]==0 and m[3][3]==1 | |
AI_TVector3SSE | transform_coord (const AI_TVector3SSE &v) const |
transform AI_Vector3, projecting back into w=1 | |
AI_TVector3SSE | x_component () const |
return x component | |
AI_TVector3SSE | y_component () const |
return y component | |
AI_TVector3SSE | z_component () const |
return z component | |
AI_TVector3SSE | pos_component () const |
return translate component | |
void | rotate_x (const float a) |
rotate around global x | |
void | rotate_y (const float a) |
rotate around global y | |
void | rotate_z (const float a) |
rotate around global z | |
void | rotate (const AI_TVector3SSE &vec, float a) |
rotate about any axis | |
void | translate (const AI_TVector3SSE &t) |
translate | |
void | set_translation (const AI_TVector3SSE &t) |
set absolute translation | |
void | scale (const AI_TVector3SSE &s) |
scale | |
void | lookat (const AI_TVector3SSE &to, const AI_TVector3SSE &up) |
unrestricted lookat | |
void | billboard (const AI_TVector3SSE &to, const AI_TVector3SSE &up) |
restricted lookat | |
void | operator *= (const AI_TMatrix44SSE &m1) |
inplace matrix mulitply | |
void | mult (const AI_TVector4SSE &src, AI_TVector4SSE &dst) const |
multiply source vector into target vector, eliminates tmp vector | |
void | mult (const AI_TVector3SSE &src, AI_TVector3SSE &dst) const |
multiply source vector into target vector, eliminates tmp vector | |
Public Attributes | |
union { | |
struct { | |
__m128 m1 | |
__m128 m2 | |
__m128 m3 | |
__m128 m4 | |
} | |
struct { | |
float m [4][4] | |
} | |
}; |
Constructor & Destructor Documentation
AI_TMatrix44SSE::AI_TMatrix44SSE | ( | ) | [inline] |
constructor 1
AI_TMatrix44SSE::AI_TMatrix44SSE | ( | const AI_TVector4SSE & | v1, | |
const AI_TVector4SSE & | v2, | |||
const AI_TVector4SSE & | v3, | |||
const AI_TVector4SSE & | v4 | |||
) | [inline] |
constructor 2
AI_TMatrix44SSE::AI_TMatrix44SSE | ( | const AI_TMatrix44SSE & | m1 | ) | [inline] |
constructor 3
AI_TMatrix44SSE::AI_TMatrix44SSE | ( | float | _m11, | |
float | _m12, | |||
float | _m13, | |||
float | _m14, | |||
float | _m21, | |||
float | _m22, | |||
float | _m23, | |||
float | _m24, | |||
float | _m31, | |||
float | _m32, | |||
float | _m33, | |||
float | _m34, | |||
float | _m41, | |||
float | _m42, | |||
float | _m43, | |||
float | _m44 | |||
) | [inline] |
constructor 4
AI_TMatrix44SSE::AI_TMatrix44SSE | ( | const AI_Quaternion & | q | ) | [inline] |
construct from AI_Quaternion
FIXME: SSE OPTIMIZATION MISSING!
AI_TMatrix44SSE::AI_TMatrix44SSE | ( | const __m128 & | _m1, | |
const __m128 & | _m2, | |||
const __m128 & | _m3, | |||
const __m128 & | _m4 | |||
) | [inline] |
construct from sse variables
Member Function Documentation
AI_Quaternion AI_TMatrix44SSE::get_quaternion | ( | ) | const [inline] |
convert to AI_Quaternion
convert orientation of 4x4 matrix into quaterion, 4x4 matrix must not be scaled!
FIXME: SSE OPTIMIZATION MISSING!
void AI_TMatrix44SSE::set | ( | const AI_TVector4SSE & | v1, | |
const AI_TVector4SSE & | v2, | |||
const AI_TVector4SSE & | v3, | |||
const AI_TVector4SSE & | v4 | |||
) | [inline] |
set 1
void AI_TMatrix44SSE::set | ( | const AI_TMatrix44SSE & | m1 | ) | [inline] |
set 2
void AI_TMatrix44SSE::set | ( | float | _m11, | |
float | _m12, | |||
float | _m13, | |||
float | _m14, | |||
float | _m21, | |||
float | _m22, | |||
float | _m23, | |||
float | _m24, | |||
float | _m31, | |||
float | _m32, | |||
float | _m33, | |||
float | _m34, | |||
float | _m41, | |||
float | _m42, | |||
float | _m43, | |||
float | _m44 | |||
) | [inline] |
set 3
void AI_TMatrix44SSE::set | ( | const AI_Quaternion & | q | ) | [inline] |
set from AI_Quaternion
FIXME: SSE OPTIMIZATION MISSING!
void AI_TMatrix44SSE::ident | ( | void | ) | [inline] |
set to identity
void AI_TMatrix44SSE::transpose | ( | ) | [inline] |
transpose
float AI_TMatrix44SSE::det | ( | ) | [inline] |
determinant
FIXME: OPTIMIZE FOR SSE!
void AI_TMatrix44SSE::invert | ( | void | ) | [inline] |
full invert
Code taken from Intel pdf "Streaming SIMD Extension - Inverse of 4x4 Matrix"
void AI_TMatrix44SSE::invert_simple | ( | void | ) | [inline] |
quick invert (if 3x3 rotation and translation)
inverts a 4x4 matrix consisting of a 3x3 rotation matrix and a translation (eg. everything that has [0,0,0,1] as the rightmost column) MUCH cheaper then a real 4x4 inversion
FIXME: SSE OPTIMIZATION!
void AI_TMatrix44SSE::mult_simple | ( | const AI_TMatrix44SSE & | mx | ) | [inline] |
quick multiplication, assumes that m[0][3]==m[1][3]==m[2][3]==0 and m[3][3]==1
optimized multiplication, assumes that m[0][3]==m[1][3]==m[2][3]==0 AND m[3][3]==1
NOTE: On SSE, this is a normal matrix multiplication
Takes 16 muls, 12 adds and 16 shuffles.
AI_TVector3SSE AI_TMatrix44SSE::transform_coord | ( | const AI_TVector3SSE & | v | ) | const [inline] |
transform AI_Vector3, projecting back into w=1
Transforms a vector by the matrix, projecting the result back into w=1.
FIXME: SSE OPTIMIZATION!
AI_TVector3SSE AI_TMatrix44SSE::x_component | ( | void | ) | const [inline] |
return x component
AI_TVector3SSE AI_TMatrix44SSE::y_component | ( | void | ) | const [inline] |
return y component
AI_TVector3SSE AI_TMatrix44SSE::z_component | ( | void | ) | const [inline] |
return z component
AI_TVector3SSE AI_TMatrix44SSE::pos_component | ( | ) | const [inline] |
return translate component
void AI_TMatrix44SSE::rotate_x | ( | const float | a | ) | [inline] |
rotate around global x
FIXME: SSE OPTIMIERUNG!
void AI_TMatrix44SSE::rotate_y | ( | const float | a | ) | [inline] |
rotate around global y
FIXME: SSE OPTIMIERUNG!
void AI_TMatrix44SSE::rotate_z | ( | const float | a | ) | [inline] |
rotate around global z
FIXME: SSE OPTIMIERUNG!
void AI_TMatrix44SSE::rotate | ( | const AI_TVector3SSE & | vec, | |
float | a | |||
) | [inline] |
rotate about any axis
FIXME: SSE OPTIMIZATION!
void AI_TMatrix44SSE::translate | ( | const AI_TVector3SSE & | t | ) | [inline] |
translate
void AI_TMatrix44SSE::set_translation | ( | const AI_TVector3SSE & | t | ) | [inline] |
set absolute translation
FIXME: RAFAEL HAS NO CLUE ABOUT SSE!
void AI_TMatrix44SSE::scale | ( | const AI_TVector3SSE & | s | ) | [inline] |
scale
void AI_TMatrix44SSE::lookat | ( | const AI_TVector3SSE & | to, | |
const AI_TVector3SSE & | up | |||
) | [inline] |
unrestricted lookat
void AI_TMatrix44SSE::billboard | ( | const AI_TVector3SSE & | to, | |
const AI_TVector3SSE & | up | |||
) | [inline] |
restricted lookat
void AI_TMatrix44SSE::operator *= | ( | const AI_TMatrix44SSE & | mx | ) | [inline] |
inplace matrix mulitply
This one uses no temp variables, this gives a 10% boost over the same code using temp variables even with optimizations turned on. Unfortunately it's not very readable though...
void AI_TMatrix44SSE::mult | ( | const AI_TVector4SSE & | src, | |
AI_TVector4SSE & | dst | |||
) | const [inline] |
multiply source vector into target vector, eliminates tmp vector
Multiply source directly into target vector (without creating a temporary AI_Vector4 object).
void AI_TMatrix44SSE::mult | ( | const AI_TVector3SSE & | src, | |
AI_TVector3SSE & | dst | |||
) | const [inline] |
multiply source vector into target vector, eliminates tmp vector
Multiply source directly into target vector (without creating a temporary AI_Vector4 object).
Member Data Documentation
__m128 AI_TMatrix44SSE::m1 |
__m128 AI_TMatrix44SSE::m2 |
__m128 AI_TMatrix44SSE::m3 |
__m128 AI_TMatrix44SSE::m4 |
float AI_TMatrix44SSE::m[4][4] |
union { ... } |
The documentation for this class was generated from the following file: