mirror of
https://github.com/aap/librw.git
synced 2024-11-25 05:05:42 +00:00
quat->mat
This commit is contained in:
parent
9bc57a0641
commit
91291709d8
@ -84,6 +84,24 @@ cross(const V3d &a, const V3d &b)
|
|||||||
a.x*b.y - a.y*b.x);
|
a.x*b.y - a.y*b.x);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Matrix
|
||||||
|
Matrix::makeRotation(const Quat &q)
|
||||||
|
{
|
||||||
|
Matrix res;
|
||||||
|
res.right.x = q.w*q.w + q.x*q.x - q.y*q.y - q.z*q.z;
|
||||||
|
res.right.y = 2*q.w*q.z + 2*q.x*q.y;
|
||||||
|
res.right.z = 2*q.x*q.z - 2*q.w*q.y;
|
||||||
|
res.up.x = 2*q.x*q.y - 2*q.w*q.z;
|
||||||
|
res.up.y = q.w*q.w - q.x*q.x + q.y*q.y - q.z*q.z;
|
||||||
|
res.up.z = 2*q.w*q.x + 2*q.y*q.z;
|
||||||
|
res.at.x = 2*q.w*q.y + 2*q.x*q.z;
|
||||||
|
res.at.y = 2*q.y*q.z - 2*q.w*q.x;
|
||||||
|
res.at.z = q.w*q.w - q.x*q.x - q.y*q.y + q.z*q.z;
|
||||||
|
res.rightw = res.upw = res.atw = 0.0f;
|
||||||
|
res.posw = 1.0f;
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Matrix::setIdentity(void)
|
Matrix::setIdentity(void)
|
||||||
{
|
{
|
||||||
@ -134,6 +152,22 @@ Matrix::transpose(Matrix *m1, Matrix *m2)
|
|||||||
matrixTranspose((float32*)m1, (float32*)m2);
|
matrixTranspose((float32*)m1, (float32*)m2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Matrix3
|
||||||
|
Matrix3::makeRotation(const Quat &q)
|
||||||
|
{
|
||||||
|
Matrix3 res;
|
||||||
|
res.right.x = q.w*q.w + q.x*q.x - q.y*q.y - q.z*q.z;
|
||||||
|
res.right.y = 2*q.w*q.z + 2*q.x*q.y;
|
||||||
|
res.right.z = 2*q.x*q.z - 2*q.w*q.y;
|
||||||
|
res.up.x = 2*q.x*q.y - 2*q.w*q.z;
|
||||||
|
res.up.y = q.w*q.w - q.x*q.x + q.y*q.y - q.z*q.z;
|
||||||
|
res.up.z = 2*q.w*q.x + 2*q.y*q.z;
|
||||||
|
res.at.x = 2*q.w*q.y + 2*q.x*q.z;
|
||||||
|
res.at.y = 2*q.y*q.z - 2*q.w*q.x;
|
||||||
|
res.at.z = q.w*q.w - q.x*q.x - q.y*q.y + q.z*q.z;
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Matrix3::setIdentity(void)
|
Matrix3::setIdentity(void)
|
||||||
|
@ -118,6 +118,7 @@ struct Matrix
|
|||||||
V3d pos;
|
V3d pos;
|
||||||
float32 posw;
|
float32 posw;
|
||||||
|
|
||||||
|
static Matrix makeRotation(const Quat &q);
|
||||||
void setIdentity(void);
|
void setIdentity(void);
|
||||||
V3d transPoint(const V3d &p);
|
V3d transPoint(const V3d &p);
|
||||||
V3d transVec(const V3d &v);
|
V3d transVec(const V3d &v);
|
||||||
@ -132,6 +133,7 @@ struct Matrix3
|
|||||||
{
|
{
|
||||||
V3d right, up, at;
|
V3d right, up, at;
|
||||||
|
|
||||||
|
static Matrix3 makeRotation(const Quat &q);
|
||||||
void setIdentity(void);
|
void setIdentity(void);
|
||||||
V3d transVec(const V3d &v);
|
V3d transVec(const V3d &v);
|
||||||
bool32 isIdentity(void);
|
bool32 isIdentity(void);
|
||||||
|
Loading…
Reference in New Issue
Block a user