|
|
|
|
Documentation |
|
Main Page Namespace List Class Hierarchy Alphabetical List Compound List File List Namespace Members Compound Members File Members Related Pages Search
NLMISC::CMatrix Class ReferenceA 4*4 Homogenous Matrix.
More...
#include <matrix.h>
List of all members.
Public Types |
enum | TRotOrder {
XYZ,
XZY,
YXZ,
YZX,
ZXY,
ZYX
} |
| Rotation Order. More...
|
Public Methods |
|
| CMatrix () |
| Constructor which init to identity(). More...
|
| CMatrix (const CMatrix &) |
| Copy Constructor. More...
|
CMatrix & | operator= (const CMatrix &) |
| operator=. More...
|
|
void | identity () |
| Reset the matrix to identity. More...
|
void | setRot (const CVector &i, const CVector &j, const CVector &k, bool hintNoScale=false) |
| Explicit setup the Rotation/Scale matrix (base). More...
|
void | setRot (const float m33[9], bool hintNoScale=false) |
| Explicit setup the Rotation/Scale matrix (base). More...
|
void | setRot (const CVector &v, TRotOrder ro) |
| Explicit setup the Rotation matrix (base) as a Euler rotation matrix. More...
|
void | setRot (const CQuat &quat) |
| Explicit setup the Rotation matrix (base) as a Quaternion rotation matrix. More...
|
void | setRot (const CMatrix &matrix) |
| Explicit setup the Rotation/Scale matrix (base) with the rotation part of an other matrix. More...
|
void | setPos (const CVector &v) |
| Explicit setup the Translation component. More...
|
void | movePos (const CVector &v) |
| Explicit move the Translation component. More...
|
void | setProj (const float proj[4]) |
| Explicit setup the Projection component. More...
|
void | resetProj () |
| Reset the Projection component to 0 0 0 1. More...
|
void | set (const float m44[16]) |
| Explicit setup the 4*4 matrix. More...
|
|
void | getRot (CVector &i, CVector &j, CVector &k) const |
| Get the Rotation/Scale matrix (base). More...
|
void | getRot (float m33[9]) const |
| Get the Rotation/Scale matrix (base). More...
|
void | getRot (CQuat &quat) const |
| Get the Rotation matrix (base). More...
|
CQuat | getRot () const |
| Get the Rotation matrix (base). More...
|
void | getPos (CVector &v) const |
| Get the Translation component. More...
|
const CVector & | getPos () const |
| Get the Translation component. More...
|
void | getProj (float proj[4]) const |
| Get the Projection component. More...
|
CVector | getI () const |
| Get the I vector of the Rotation/Scale matrix (base). More...
|
CVector | getJ () const |
| Get the J vector of the Rotation/Scale matrix (base). More...
|
CVector | getK () const |
| Get the K vector of the Rotation/Scale matrix (base). More...
|
void | get (float m44[16]) const |
| Get 4*4 matrix. More...
|
const float * | get () const |
| Get 4*4 matrix. More...
|
|
void | translate (const CVector &v) |
| Apply a translation to the matrix. same as M=M*T. More...
|
void | rotateX (float a) |
| Apply a rotation on axis X to the matrix. More...
|
void | rotateY (float a) |
| Apply a rotation on axis Y to the matrix. More...
|
void | rotateZ (float a) |
| Apply a rotation on axis Z to the matrix. More...
|
void | rotate (const CVector &v, TRotOrder ro) |
| Apply a euler rotation. More...
|
void | rotate (const CQuat &quat) |
| Apply a quaternion rotation. More...
|
void | scale (float f) |
| Apply a uniform scale to the matrix. More...
|
void | scale (const CVector &scale) |
| Apply a non-uniform scale to the matrix. More...
|
|
void | setMulMatrix (const CMatrix &m1, const CMatrix &m2) |
| Matrix multiplication. More...
|
CMatrix | operator * (const CMatrix &in) const |
| Matrix multiplication. More...
|
CMatrix & | operator *= (const CMatrix &in) |
| equivalent to M=M*in. More...
|
void | setMulMatrixNoProj (const CMatrix &m1, const CMatrix &m2) |
| Matrix multiplication assuming no projection at all in m1/m2 and Hence this. More...
|
void | transpose3x3 () |
| transpose the rotation part only of the matrix (swap columns/lines). More...
|
void | transpose () |
| transpose the matrix (swap columns/lines). More...
|
void | invert () |
| Invert the matrix. More...
|
CMatrix | inverted () const |
| Return the matrix inverted. More...
|
bool | normalize (TRotOrder pref) |
| Normalize the matrix so that the rotation part is now an orthonormal basis, ie a rotation with no scale. More...
|
|
CVector | mulVector (const CVector &v) const |
| Multiply a normal. ie v.w=0 so the Translation component doesn't affect result. Projection doesn't affect result. More...
|
CVector | mulPoint (const CVector &v) const |
| Multiply a point. ie v.w=1 so the Translation component do affect result. Projection doesn't affect result. More...
|
CVector | operator * (const CVector &v) const |
| Multiply a point. -
See also:
-
mulPoint.
More...
|
CVectorH | operator * (const CVectorH &v) const |
| Multiply with an homogenous vector. More...
|
|
void | serial (IStream &f) |
bool | hasScalePart () const |
| return true if the matrix has a scale part (by scale(), by multiplication etc...). More...
|
bool | hasScaleUniform () const |
| return true if hasScalePart() and if if this scale is uniform. More...
|
float | getScaleUniform () const |
| return true the uniform scale. valid only if hasScaleUniform() is true, else 1 is returned. More...
|
bool | hasProjectionPart () const |
| return true if the matrix has a projection part (by setProj(), by multiplication etc...). More...
|
Static Public Attributes |
const CMatrix | Identity |
| The identity matrix. Same as CMatrix(). More...
|
Private Methods |
void | fastInvert33 (CMatrix &ret) const |
bool | slowInvert33 (CMatrix &ret) const |
bool | slowInvert44 (CMatrix &ret) const |
float & | mat (sint i, sint j) |
const float & | mat (sint i, sint j) const |
void | getCofactIndex (sint i, sint &l1, sint &l2, sint &l3) const |
bool | hasTrans () const |
bool | hasRot () const |
bool | hasProj () const |
bool | hasAll () const |
void | testExpandRot () const |
void | testExpandProj () const |
Private Attributes |
float | M [16] |
float | Scale33 |
uint32 | StateBit |
Friends |
CPlane | operator * (const CPlane &p, const CMatrix &m) |
| Plane (line vector) multiplication. More...
|
Detailed Description
A 4*4 Homogenous Matrix.
This is a column matrix, so operations like: v1=A*B*C*v0 ; applies C first , then B, then A to vector v0.
Since it is a column matrix, the first column is the I vector of the base, 2nd is J, 3th is K.
4th column vector is T, the translation vector.
Angle orientation are: Xaxis: YtoZ. Yaxis: ZtoX. Zaxis: XtoY.
This matrix keep a matrix state to improve Matrix, vector and plane computing (matrix inversion, vector multiplication...). The internal matrix know if:
- matrix is identity
- matrix has a translation component
- matrix has a rotation component
- matrix has a uniform scale component (scale which is the same along the 3 axis)
- matrix has a non-uniform scale component
- matrix has a projection component (4th line of the matrix is not 0 0 0 1).
An example of improvement is that CMatrix::operator *(const CVector &v) return v if the matrix is identity.
By default, a matrix is identity. But for a performance view, this is just a StateBit=0... -
Author:
-
Lionel Berenguier , Nevrax France
-
Date:
-
2000
Definition at line 66 of file matrix.h.
Member Enumeration Documentation
enum NLMISC::CMatrix::TRotOrder
|
|
|
Rotation Order.
-
Enumeration values:
-
Definition at line 70 of file matrix.h. |
Constructor & Destructor Documentation
NLMISC::CMatrix::CMatrix |
( |
|
) |
[inline] |
|
|
Constructor which init to identity().
Definition at line 88 of file matrix.h.
References M, and StateBit.
Referenced by getRot, inverted, operator *, operator *=, rotate, setMulMatrix, setMulMatrixNoProj, setRot, testExpandProj, and testExpandRot. |
NLMISC::CMatrix::CMatrix |
( |
const CMatrix & |
|
) |
|
|
Member Function Documentation
void NLMISC::CMatrix::fastInvert33 |
( |
CMatrix & |
ret |
) |
const [private] |
|
|
Definition at line 1046 of file matrix.cpp.
References a11, a12, a13, a21, a22, a23, a31, a32, a33, MAT_SCALEUNI, s, Scale33, and StateBit.
Referenced by inverted. |
const float * NLMISC::CMatrix::get |
( |
|
) |
const |
|
|
Get 4*4 matrix.
-
Returns:
-
the matrix's 4*4 column matrix (4x4 matrix stored in column-major order as 16 consecutive values)
Definition at line 451 of file matrix.cpp.
References M, testExpandProj, and testExpandRot. |
void NLMISC::CMatrix::get |
( |
float |
m44[16] |
) |
const |
|
|
Get 4*4 matrix.
-
Parameters:
-
m44 |
the matrix's 4*4 column matrix (4x4 matrix stored in column-major order as 16 consecutive values) |
Definition at line 443 of file matrix.cpp.
References M, testExpandProj, and testExpandRot. |
void NLMISC::CMatrix::getCofactIndex |
( |
sint |
i, |
|
|
sint & |
l1, |
|
|
sint & |
l2, |
|
|
sint & |
l3 |
|
) |
const [inline, private] |
|
CVector NLMISC::CMatrix::getI |
( |
|
) |
const |
|
|
Get the I vector of the Rotation/Scale matrix (base).
Definition at line 419 of file matrix.cpp.
References a11, a21, a31, and hasRot.
Referenced by NL3D::CPlaneBasis::CPlaneBasis, NL3D::CMaterial::decompUserTexMat, NL3D::CPSUtil::displayBasis, NL3D::CZoneLighter::light, normalize, NL3D::CQuadTree::selectSegment, slowInvert33, NL3D::CWaterRenderObs::traverse, and NL3D::CSpinnerFunctor::updateSamples. |
CVector NLMISC::CMatrix::getJ |
( |
|
) |
const |
|
|
Get the J vector of the Rotation/Scale matrix (base).
Definition at line 427 of file matrix.cpp.
References a12, a22, a32, and hasRot.
Referenced by NL3D::CPlaneBasis::CPlaneBasis, NL3D::CMaterial::decompUserTexMat, NL3D::CPSUtil::displayBasis, NL3D::CParticleSystem::getLOD, NL3D::CParticleSystem::getLODVect, NL3D::CZoneLighter::light, normalize, NL3D::CQuadTree::selectRay, NL3D::CQuadTree::selectSegment, slowInvert33, NL3D::CWaterRenderObs::traverse, and NL3D::CSpinnerFunctor::updateSamples. |
CVector NLMISC::CMatrix::getK |
( |
|
) |
const |
|
const CVector& NLMISC::CMatrix::getPos |
( |
|
) |
const [inline] |
|
|
Get the Translation component.
NB: a const & works because it is a column vector -
Returns:
-
the matrix's translation vector.
Definition at line 193 of file matrix.h.
References M. |
void NLMISC::CMatrix::getPos |
( |
CVector & |
v |
) |
const [inline] |
|
|
Get the Translation component.
-
Parameters:
-
v |
the matrix's translation vector. |
Definition at line 188 of file matrix.h.
References M, and v.
Referenced by NL3D::CVegetableManager::addInstance, NL3D::CMaterial::decompUserTexMat, NL3D::CPSUtil::displayBasis, NL3D::CVegetable::generateInstance, NL3D::CParticleSystem::getLOD, NL3D::CParticleSystem::getLODVect, NLPACS::UMoveContainer::getPACSCoordsFromMatrix, NL3D::CParticleSystem::setNumTris, NL3D::CParticleSystem::setSysMat, NL3D::CWaterRenderObs::traverse, NL3D::ITravCameraScene::update, and NL3D::CParticleSystem::updateLODRatio. |
void NLMISC::CMatrix::getProj |
( |
float |
proj[4] |
) |
const |
|
|
Get the Projection component.
-
Parameters:
-
proj |
the matrix's projection vector. |
Definition at line 401 of file matrix.cpp.
References a41, a42, a43, a44, and hasProj. |
CQuat NLMISC::CMatrix::getRot |
( |
|
) |
const [inline] |
|
|
Get the Rotation matrix (base).
-
Parameters:
-
quat |
the return quaternion. |
Definition at line 184 of file matrix.h. |
void NLMISC::CMatrix::getRot |
( |
CQuat & |
quat |
) |
const |
|
void NLMISC::CMatrix::getRot |
( |
float |
m33[9] |
) |
const |
|
|
Get the Rotation/Scale matrix (base).
-
Parameters:
-
m33 |
the matrix's 3*3 column rotation matrix. (3x3 matrix stored in column-major order as 9 consecutive values) |
Definition at line 369 of file matrix.cpp.
References a11, a12, a13, a21, a22, a23, a31, a32, a33, and hasRot. |
|
Get the Rotation/Scale matrix (base).
-
Parameters:
-
i |
The matrix's I vector of the cartesian base. |
j |
The matrix's J vector of the cartesian base. |
k |
The matrix's K vector of the cartesian base. |
Definition at line 353 of file matrix.cpp.
References a11, a12, a13, a21, a22, a23, a31, a32, a33, and hasRot. |
float NLMISC::CMatrix::getScaleUniform |
( |
|
) |
const |
|
bool NLMISC::CMatrix::hasAll |
( |
|
) |
const [inline, private] |
|
bool NLMISC::CMatrix::hasProj |
( |
|
) |
const [inline, private] |
|
|
Definition at line 125 of file matrix.cpp.
References MAT_PROJ, and StateBit.
Referenced by getProj, hasAll, operator=, rotateX, rotateY, rotateZ, scale, serial, testExpandProj, translate, and transpose. |
bool NLMISC::CMatrix::hasProjectionPart |
( |
|
) |
const |
|
bool NLMISC::CMatrix::hasRot |
( |
|
) |
const [inline, private] |
|
|
Definition at line 117 of file matrix.cpp.
References MAT_ROT, MAT_SCALEANY, MAT_SCALEUNI, and StateBit.
Referenced by getI, getJ, getK, getRot, hasAll, mulPoint, mulVector, operator=, rotateX, rotateY, serial, setRot, testExpandRot, translate, and transpose3x3. |
bool NLMISC::CMatrix::hasScalePart |
( |
|
) |
const |
|
bool NLMISC::CMatrix::hasScaleUniform |
( |
|
) |
const |
|
bool NLMISC::CMatrix::hasTrans |
( |
|
) |
const [inline, private] |
|
void NLMISC::CMatrix::identity |
( |
|
) |
|
|
|
Reset the matrix to identity.
Definition at line 200 of file matrix.cpp.
References a14, a24, a34, MAT_IDENTITY, and StateBit.
Referenced by NLLIGO::CZoneEdge::buildMatrix, NL3D::CCubeGrid::CCubeGrid, NL3D::CStaticQuadGrid::clear, NLPACS::CQuadGrid::CQuadGrid, NL3D::CQuadGrid::CQuadGrid, NL3D::CQuadTree::CQuadTree, NL3D::CStaticQuadGrid::CStaticQuadGrid, NL3D::CInstanceGroup::getInstanceMatrix, NL3D::CWaterShape::getShapeInWorldSpace, NL3D::ITravCameraScene::ITravCameraScene, NL3D::CVegetableManager::render, NL3D::CQuadTree::selectRay, NL3D::CQuadTree::selectSegment, serial, setMulMatrix, and setMulMatrixNoProj. |
void NLMISC::CMatrix::invert |
( |
|
) |
|
|
CMatrix NLMISC::CMatrix::inverted |
( |
|
) |
const |
|
|
Return the matrix inverted.
if the matrix can't be inverted, identity is returned.
Definition at line 1167 of file matrix.cpp.
References a14, a24, a34, CMatrix, fastInvert33, MAT_PROJ, MAT_ROT, MAT_SCALEANY, MAT_TRANS, slowInvert33, slowInvert44, StateBit, testExpandProj, and testExpandRot.
Referenced by NL3D::CStaticQuadGrid::build, invert, NL3D::CZoneLighter::lightWater, NL3D::CHeatHaze::performHeatHaze, NL3D::CParticleSystem::setSysMat, NL3D::CParticleSystem::setViewMat, NL3D::CWaterRenderObs::traverse, and NL3D::ITravCameraScene::update. |
const float& NLMISC::CMatrix::mat |
( |
sint |
i, |
|
|
sint |
j |
|
) |
const [inline, private] |
|
float& NLMISC::CMatrix::mat |
( |
sint |
i, |
|
|
sint |
j |
|
) |
[inline, private] |
|
void NLMISC::CMatrix::movePos |
( |
const CVector & |
v |
) |
|
|
|
Multiply a point. ie v.w=1 so the Translation component do affect result. Projection doesn't affect result.
Definition at line 1338 of file matrix.cpp.
References a11, a12, a13, a14, a21, a22, a23, a24, a31, a32, a33, a34, hasRot, hasTrans, and v.
Referenced by operator *. |
|
Multiply a normal. ie v.w=0 so the Translation component doesn't affect result. Projection doesn't affect result.
Definition at line 1321 of file matrix.cpp.
References a11, a12, a13, a21, a22, a23, a31, a32, a33, hasRot, and v.
Referenced by NL3D::CVegetableManager::addInstance, NL3D::CMeshVPPerPixelLight::begin, NL3D::CParticleSystem::getLODVect, NLPACS::UMoveContainer::getPACSCoordsFromMatrix, and NL3D::ITravCameraScene::update. |
bool NLMISC::CMatrix::normalize |
( |
TRotOrder |
pref |
) |
|
|
|
Normalize the matrix so that the rotation part is now an orthonormal basis, ie a rotation with no scale.
NB: projection part and translation part are not modified. -
Parameters:
-
pref |
the preference axis order to normalize. ZYX means that K direction will be kept, and the plane JK will be used to lead the I vector. |
-
Returns:
-
false if One of the vector basis is null. true otherwise.
Definition at line 1247 of file matrix.cpp.
References a11, a12, a13, a21, a22, a23, a31, a32, a33, getI, getJ, getK, MAT_ROT, MAT_SCALEANY, MAT_SCALEUNI, Scale33, StateBit, testExpandRot, XYZ, XZY, YXZ, YZX, ZXY, and ZYX.
Referenced by CTrackKeyFramerTCB< CKeyTCBQuat, NLMISC::CAngleAxis >::compile, NL3D::CQuadTree::selectRay, and NL3D::CQuadTree::selectSegment. |
|
Multiply with an homogenous vector.
Definition at line 1367 of file matrix.cpp.
References a11, a12, a13, a14, a21, a22, a23, a24, a31, a32, a33, a34, a41, a42, a43, a44, testExpandProj, testExpandRot, and v. |
CVector NLMISC::CMatrix::operator * |
( |
const CVector & |
v |
) |
const [inline] |
|
CMatrix NLMISC::CMatrix::operator * |
( |
const CMatrix & |
in |
) |
const [inline] |
|
CMatrix& NLMISC::CMatrix::operator *= |
( |
const CMatrix & |
in |
) |
[inline] |
|
CMatrix & NLMISC::CMatrix::operator= |
( |
const CMatrix & |
|
) |
|
|
|
operator=.
Definition at line 168 of file matrix.cpp.
References a11, a12, a13, a14, a41, a42, a43, a44, hasAll, hasProj, hasRot, M, MAT_VALIDALL, Scale33, and StateBit. |
void NLMISC::CMatrix::resetProj |
( |
|
) |
|
|
void NLMISC::CMatrix::rotate |
( |
const CQuat & |
quat |
) |
|
|
|
Apply a euler rotation.
-
Parameters:
-
v |
a vector of 3 angle (in radian), giving rotation around each axis (x,y,z) |
ro |
the order of transformation applied. if ro==XYZ, then the transform is M=M*Rx*Ry*Rz |
Definition at line 618 of file matrix.cpp.
References CMatrix, v, XYZ, XZY, YXZ, YZX, ZXY, and ZYX.
Referenced by NL3D::CInstanceGroup::getInstanceMatrix, and NL3D::CWaterShape::getShapeInWorldSpace. |
void NLMISC::CMatrix::rotateX |
( |
float |
a |
) |
|
|
|
Apply a rotation on axis X to the matrix.
same as M=M*Rx -
Parameters:
-
Definition at line 498 of file matrix.cpp.
References a12, a13, a22, a23, a32, a33, a42, a43, hasProj, hasRot, MAT_ROT, StateBit, and testExpandRot. |
void NLMISC::CMatrix::rotateY |
( |
float |
a |
) |
|
|
|
Apply a rotation on axis Y to the matrix.
same as M=M*Ry -
Parameters:
-
Definition at line 538 of file matrix.cpp.
References a11, a13, a21, a23, a31, a33, a41, a43, hasProj, hasRot, MAT_ROT, StateBit, and testExpandRot. |
void NLMISC::CMatrix::rotateZ |
( |
float |
a |
) |
|
|
|
Apply a rotation on axis Z to the matrix.
same as M=M*Rz -
Parameters:
-
Definition at line 578 of file matrix.cpp.
References a11, a12, a21, a22, a31, a32, a41, a42, hasProj, MAT_ROT, MAT_SCALEANY, MAT_SCALEUNI, StateBit, and testExpandRot.
Referenced by NLLIGO::CZoneEdge::buildMatrix. |
void NLMISC::CMatrix::scale |
( |
const CVector & |
scale |
) |
|
|
|
Apply a non-uniform scale to the matrix.
Definition at line 669 of file matrix.cpp.
References a11, a12, a13, a21, a22, a23, a31, a32, a33, a41, a42, a43, hasProj, MAT_SCALEANY, scale, StateBit, testExpandRot, and v. |
void NLMISC::CMatrix::scale |
( |
float |
f |
) |
|
|
|
Apply a uniform scale to the matrix.
Definition at line 644 of file matrix.cpp.
References a11, a12, a13, a21, a22, a23, a31, a32, a33, a41, a42, a43, hasProj, MAT_SCALEANY, MAT_SCALEUNI, Scale33, StateBit, and testExpandRot.
Referenced by NL3D::CInstanceGroup::getInstanceMatrix, NL3D::CWaterShape::getShapeInWorldSpace, and scale. |
void NLMISC::CMatrix::serial |
( |
IStream & |
f |
) |
|
|
|
Definition at line 1536 of file matrix.cpp.
References a11, a12, a13, a14, a21, a22, a23, a24, a31, a32, a33, a34, a41, a42, a43, a44, hasProj, hasRot, hasTrans, identity, Scale33, and StateBit. |
void NLMISC::CMatrix::set |
( |
const float |
m44[16] |
) |
|
|
|
Explicit setup the 4*4 matrix.
Avoid it. It implies low compute since no check is done on rotation matrix to see what type of matrix it is (identity, rotation, scale, uniform scale). BUT check are made to see if it has translation or projection components. -
Parameters:
-
m44 |
the 4*4 column matrix (4x4 matrix stored in column-major order as 16 consecutive values) |
Definition at line 320 of file matrix.cpp.
References a14, a24, a34, a41, a42, a43, a44, M, MAT_IDENTITY, MAT_PROJ, MAT_ROT, MAT_SCALEANY, MAT_TRANS, MAT_VALIDPROJ, Scale33, and StateBit.
Referenced by NL3D::CDriverGL::refreshProjMatrixFromGL. |
void NLMISC::CMatrix::setMulMatrix |
( |
const CMatrix & |
m1, |
|
|
const CMatrix & |
m2 |
|
) |
|
|
|
Matrix multiplication.
Because of copy avoidance, this is the fastest method Equivalent to *this= m1 * m2 -
Warning:
-
*this MUST NOT be the same as m1 or m2, else it doesn't work (not checked/nlasserted)
Definition at line 821 of file matrix.cpp.
References a11, a12, a13, a14, a21, a22, a23, a24, a31, a32, a33, a34, a41, a42, a43, a44, CMatrix, identity, MAT_PROJ, MAT_ROT, MAT_SCALEANY, MAT_SCALEUNI, MAT_TRANS, MAT_VALIDALL, MAT_VALIDPROJ, MAT_VALIDROT, nlassert, Scale33, StateBit, and testExpandRot. |
void NLMISC::CMatrix::setMulMatrixNoProj |
( |
const CMatrix & |
m1, |
|
|
const CMatrix & |
m2 |
|
) |
|
|
|
Matrix multiplication assuming no projection at all in m1/m2 and Hence this.
Even Faster than setMulMatrix() Equivalent to *this= m1 * m2 NB: Also always suppose m1 has a translation, for optim consideration -
Warning:
-
*this MUST NOT be the same as m1 or m2, else it doesn't work (not checked/nlasserted)
Definition at line 702 of file matrix.cpp.
References a11, a12, a13, a14, a21, a22, a23, a24, a31, a32, a33, a34, CMatrix, identity, MAT_ROT, MAT_SCALEANY, MAT_SCALEUNI, MAT_TRANS, MAT_VALIDALL, MAT_VALIDROT, nlassert, Scale33, StateBit, and testExpandRot. |
void NLMISC::CMatrix::setPos |
( |
const CVector & |
v |
) |
|
|
void NLMISC::CMatrix::setProj |
( |
const float |
proj[4] |
) |
|
|
|
Explicit setup the Projection component.
Proj is tested to see if the matrix now have a projection component. -
Parameters:
-
proj |
the 4th line of the matrix. Set it to 0 0 0 1 to reset it to default. |
Definition at line 291 of file matrix.cpp.
References a41, a42, a43, a44, MAT_PROJ, MAT_VALIDPROJ, and StateBit. |
void NLMISC::CMatrix::setRot |
( |
const CMatrix & |
matrix |
) |
|
|
|
Explicit setup the Rotation/Scale matrix (base) with the rotation part of an other matrix.
-
Parameters:
-
matrix |
the matrix to copy rot part. |
Definition at line 243 of file matrix.cpp.
References a11, a12, a13, a21, a22, a23, a31, a32, a33, hasRot, MAT_ROT, MAT_SCALEANY, MAT_SCALEUNI, MAT_VALIDROT, matrix, Scale33, and StateBit. |
void NLMISC::CMatrix::setRot |
( |
const CQuat & |
quat |
) |
|
|
|
Explicit setup the Rotation matrix (base) as a Quaternion rotation matrix.
-
Parameters:
-
Definition at line 1424 of file matrix.cpp.
References a11, a12, a13, a21, a22, a23, a31, a32, a33, MAT_ROT, MAT_SCALEANY, MAT_SCALEUNI, Scale33, and StateBit. |
|
Explicit setup the Rotation matrix (base) as a Euler rotation matrix.
-
Parameters:
-
v |
a vector of 3 angle (in radian), giving rotation around each axis (x,y,z) |
ro |
the order of transformation applied. if ro==XYZ, then the transform is M=M*Rx*Ry*Rz |
Definition at line 231 of file matrix.cpp.
References CMatrix, setRot, and v. |
void NLMISC::CMatrix::setRot |
( |
const float |
m33[9], |
|
|
bool |
hintNoScale = false |
|
) |
|
|
|
Explicit setup the Rotation/Scale matrix (base).
Avoid it. It implies low compute since no check is done on m33 to see what type of matrix it is (identity, raotation, scale, uniform scale) -
Parameters:
-
m33 |
the 3*3 column rotation matrix. (3x3 matrix stored in column-major order as 9 consecutive values) |
hintNoScale |
set it to true if you are sure that your rot matrix is a pure rot matrix with no scale. If set to true and your rotation is not an orthonormal basis, unpredictable result are excepted. |
Definition at line 220 of file matrix.cpp.
References a11, a12, a13, a21, a22, a23, a31, a32, a33, MAT_ROT, MAT_SCALEANY, MAT_SCALEUNI, Scale33, and StateBit. |
void NLMISC::CMatrix::setRot |
( |
const CVector & |
i, |
|
|
const CVector & |
j, |
|
|
const CVector & |
k, |
|
|
bool |
hintNoScale = false |
|
) |
|
|
|
Explicit setup the Rotation/Scale matrix (base).
Avoid it. It implies low compute since no check is done on base to see what type of matrix it is (identity, rotation, scale, uniform scale...) -
Parameters:
-
i |
The I vector of the cartesian base. |
j |
The J vector of the cartesian base. |
k |
The K vector of the cartesian base. |
hintNoScale |
set it to true if you are sure that your rot matrix is a pure rot matrix with no scale. If set to true and your rotation is not an orthonormal basis, unpredictable result are excepted. |
Definition at line 209 of file matrix.cpp.
References a11, a12, a13, a21, a22, a23, a31, a32, a33, MAT_ROT, MAT_SCALEANY, MAT_SCALEUNI, Scale33, and StateBit.
Referenced by NL3D::CPSUtil::buildSchmidtBasis, NL3D::CCubeGrid::CCubeGrid, CTrackKeyFramerTCB< CKeyTCBQuat, NLMISC::CAngleAxis >::compile, NL3D::CZoneLighter::lightWater, NL3D::CQuadTree::selectRay, NL3D::CQuadTree::selectSegment, setRot, and NL3D::CSpinnerFunctor::updateSamples. |
bool NLMISC::CMatrix::slowInvert33 |
( |
CMatrix & |
ret |
) |
const [private] |
|
bool NLMISC::CMatrix::slowInvert44 |
( |
CMatrix & |
ret |
) |
const [private] |
|
void NLMISC::CMatrix::testExpandProj |
( |
|
) |
const [inline, private] |
|
void NLMISC::CMatrix::testExpandRot |
( |
|
) |
const [inline, private] |
|
|
Definition at line 135 of file matrix.cpp.
References CMatrix, hasRot, MAT_VALIDROT, and StateBit.
Referenced by get, inverted, normalize, operator *, rotateX, rotateY, rotateZ, scale, setMulMatrix, and setMulMatrixNoProj. |
void NLMISC::CMatrix::translate |
( |
const CVector & |
v |
) |
|
|
|
Apply a translation to the matrix. same as M=M*T.
-
Parameters:
-
ro |
the RotOrder which show how to get the euler. |
-
Returns:
-
one solution of Euler angle. A rotate() with this value and the RotOrder ro will give the same matrix.
-
Todo:
-
yoyo: implement it.
Definition at line 470 of file matrix.cpp.
References a11, a12, a13, a14, a21, a22, a23, a24, a31, a32, a33, a34, a41, a42, a43, a44, hasProj, hasRot, MAT_TRANS, StateBit, and v.
Referenced by NL3D::CInstanceGroup::getInstanceMatrix, and NL3D::CWaterShape::getShapeInWorldSpace. |
void NLMISC::CMatrix::transpose |
( |
|
) |
|
|
|
transpose the matrix (swap columns/lines).
NB: this transpose the 4*4 matrix entirely (even proj/translate part).
Definition at line 1012 of file matrix.cpp.
References a14, a24, a34, a41, a42, a43, hasProj, hasTrans, MAT_PROJ, MAT_TRANS, StateBit, testExpandProj, and transpose3x3. |
void NLMISC::CMatrix::transpose3x3 |
( |
|
) |
|
|
Friends And Related Function Documentation
CPlane operator * |
( |
const CPlane & |
p, |
|
|
const CMatrix & |
m |
|
) |
[friend] |
|
|
Plane (line vector) multiplication.
Definition at line 1385 of file matrix.cpp. |
Member Data Documentation
const CMatrix NLMISC::CMatrix::Identity [static]
|
|
float NLMISC::CMatrix::M[16] [private]
|
|
float NLMISC::CMatrix::Scale33 [private]
|
|
uint32 NLMISC::CMatrix::StateBit [private]
|
|
|
Definition at line 345 of file matrix.h.
Referenced by CMatrix, fastInvert33, getRot, hasProj, hasProjectionPart, hasRot, hasScalePart, hasScaleUniform, hasTrans, identity, inverted, movePos, normalize, operator=, resetProj, rotateX, rotateY, rotateZ, scale, serial, set, setMulMatrix, setMulMatrixNoProj, setPos, setProj, setRot, testExpandProj, testExpandRot, translate, and transpose. |
The documentation for this class was generated from the following files:
|
|