static void makeRotateMatrix(float angle,
float ax, float ay, float az,
ref float[] m)
{
float radians, sine, cosine, ab, bc, ca, tx, ty, tz;
float[] axis = new float[3];
float mag;
axis[0] = ax;
axis[1] = ay;
axis[2] = az;
mag = (float)Math.Sqrt(axis[0] * axis[0] + axis[1] * axis[1] + axis[2] * axis[2]);
if (mag != 0)
{
axis[0] /= mag;
axis[1] /= mag;
axis[2] /= mag;
}
radians = angle * (float)(Math.PI / 180.0);
sine = (float)Math.Sin(radians);
cosine = (float)Math.Cos(radians);
ab = axis[0] * axis[1] * (1 - cosine);
bc = axis[1] * axis[2] * (1 - cosine);
ca = axis[2] * axis[0] * (1 - cosine);
tx = axis[0] * axis[0];
ty = axis[1] * axis[1];
tz = axis[2] * axis[2];
m[0] = tx + cosine * (1 - tx);
m[1] = ab + axis[2] * sine;
m[2] = ca - axis[1] * sine;
m[3] = 0.0f;
m[4] = ab - axis[2] * sine;
m[5] = ty + cosine * (1 - ty);
m[6] = bc + axis[0] * sine;
m[7] = 0.0f;
m[8] = ca + axis[1] * sine;
m[9] = bc - axis[0] * sine;
m[10] = tz + cosine * (1 - tz);
m[11] = 0;
m[12] = 0;
m[13] = 0;
m[14] = 0;
m[15] = 1;
}