DZone Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world
Apply A Rotation About An Arbitrary Axis To A Matrix.
// Apply a rotation about an arbitrary axis to a matrix.
/*!
* Apply a rotation about an arbitrary axis to a matrix.
* m is just a float[4][4], q is just a float[4]
*/
void lib3ds_matrix_rotate(Lib3dsMatrix m, Lib3dsQuat q) {
float s, xs, ys, zs, wx, wy, wz, xx, xy, xz, yy, yz, zz, l;
Lib3dsMatrix R;
l = q[0] * q[0] + q[1] * q[1] + q[2] * q[2] + q[3] * q[3];
s = 2.0f / l;
xs = q[0] * s;
ys = q[1] * s;
zs = q[2] * s;
wx = q[3] * xs;
wy = q[3] * ys;
wz = q[3] * zs;
xx = q[0] * xs;
xy = q[0] * ys;
xz = q[0] * zs;
yy = q[1] * ys;
yz = q[1] * zs;
zz = q[2] * zs;
R[0][0] = 1.0f - (yy + zz);
R[1][0] = xy - wz;
R[2][0] = xz + wy;
R[0][1] = xy + wz;
R[1][1] = 1.0f - (xx + zz);
R[2][1] = yz - wx;
R[0][2] = xz - wy;
R[1][2] = yz + wx;
R[2][2] = 1.0f - (xx + yy);
R[3][0] = R[3][1] = R[3][2] = R[0][3] = R[1][3] = R[2][3] = 0.0f;
R[3][3] = 1.0f;
lib3ds_matrix_mult(m, R);
}





