1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| MATRIX& MATRIX::quaternionToMatrix(const QUATERNION& qRot)
{
identity();
GLfloat n, s;
GLfloat xs, ys, zs;
GLfloat wx, wy, wz;
GLfloat xx, xy, xz;
GLfloat yy, yz, zz;
n = (qRot.m_fX * qRot.m_fX) + (qRot.m_fY * qRot.m_fY) + (qRot.m_fZ * qRot.m_fZ) + (qRot.m_fW * qRot.m_fW);
s = (n > 0.0f) ? (2.0f / n) : 0.0f;
xs = qRot.m_fX * s; ys = qRot.m_fY * s; zs = qRot.m_fZ * s;
wx = qRot.m_fW * xs; wy = qRot.m_fW * ys; wz = qRot.m_fW * zs;
xx = qRot.m_fX * xs; xy = qRot.m_fX * ys; xz = qRot.m_fX * zs;
yy = qRot.m_fY * ys; yz = qRot.m_fY * zs; zz = qRot.m_fZ * zs;
setValue(0,0,1.0f - (yy + zz)); setValue(1,0,xy - wz); setValue(2,0,xz + wy);
setValue(0,1,xy + wz); setValue(1,1,1.0f - (xx + zz)); setValue(2,1,yz - wx);
setValue(0,2,xz - wy); setValue(1,2,yz + wx); setValue(2,2,1.0f - (xx + yy));
return (*this);
} |
Partager