void matrix4x4f::rotate( const float &angle, vec3f &axis ) { float s = sin(DEGTORAD(angle)); float c = cos(DEGTORAD(angle)); axis.norm(); float ux = axis.x; float uy = axis.y; float uz = axis.z; m[0] = c + (1-c) * ux*ux; m[1] = (1-c) * ux*uy + s*uz; m[2] = (1-c) * ux*uz - s*uy; m[3] = 0; m[4] = (1-c) * uy*ux - s*uz; m[5] = c + (1-c) * pow(uy,2); m[6] = (1-c) * uy*uz + s*ux; m[7] = 0; m[8] = (1-c) * uz*ux + s*uy; m[9] = (1-c) * uz*uy - s*ux; m[10] = c + (1-c) * pow(uz,2); m[11] = 0; m[12] = 0; m[13] = 0; m[14] = 0; m[15] = 1; }