OpenGL 任意の軸での回転
OpenGLで任意の軸回転をしたいと思っていた.
x,y,z軸回転に変換してglRotatefを使わなくてもいいコードがあったのでメモ.
#define RADIAN( n ) ( ( n ) * ( 3.1415926535897932384626 / 180.0 ) ) void FreeRotate( float n[3], float r ) { float v[16]; float w =(float)cos( RADIAN( r ) / 2.0f ); float w2 = w * w; float s = (float)sin( RADIAN( r ) / 2.0f ); float x = n[0] * s; float y = n[1] * s; float z = n[2] * s; float x2 = x * x; float y2 = y * y; float z2 = z * z; v[0] = w2 + x2 - y2 - z2; v[4] = 2 * ( ( x * y ) - ( w * z ) ); v[8] = 2 * ( ( x * z ) + ( w * y ) ); v[12] = 0.0f; v[1] = 2 * ( ( x * y ) + ( w * z ) ); v[5] = w2 - x2 + y2 - z2; v[9] = 2 * ( ( y * z ) - ( w * x ) ); v[13] = 0.0f; v[2] = 2 * ( ( x * z ) - ( w * y ) ); v[6] = 2 * ( ( y * z ) + ( w * x ) ); v[10] = w2 - x2 - y2 + z2; v[14] = 0.0f; v[3] = 0.0f; v[7] = 0.0f; v[11] = 0.0f; v[15] = 1.0f; glMultMatrixf( v ); }