円について話しているので、2D アプリケーションを作成していると思います。
OpenGL では、次の座標があります。
Y
|
|
|
O---- X
/
/
Z
これは、2D アプリケーションが XY 空間にあり、Z がモニターに対して (そして外側に向かって) 垂直であることを意味します。
したがって、円が他の円の周りを回っている場合、まず円を XY 平面 (たとえば Y 軸) で平行移動し、次にZ軸で回転を適用することを意図していたはずです。
したがって、行列の乗算は次のようになります。
(cos(angle) sin(angle) 0 0 ) ( 1 0 0 0 ) ( circle_center_x )
(-sin(angle) cos(angle) 0 0 ) ( 0 1 0 yTran ) ( circle_center_y )
( 0 0 1 0 ) ( 0 0 1 0 ) ( 0 )
( 0 0 0 1 ) ( 0 0 0 1 ) ( 1 )
または単に2Dで:
(cos(angle) sin(angle) 0 ) ( 1 0 0 ) ( circle_center_x )
(-sin(angle) cos(angle) 0 ) ( 0 1 yTran ) ( circle_center_y )
( 0 0 1 ) ( 0 0 1 ) ( 1 )
OpenGL 関数の使用:
glRotatef(angle, 0, 0, 1);
glTranslatef(0, yTran, 0);
glBegin(GL_LINE_LOOP);
for (...)
/* points of circle around circle_center_x/y */
glEnd();
OpenGL では、行列は右側で乗算されることに注意してください。glRotatef
そのため、 の前に書くと、平行移動の後glTranslatef
に回転が適用されます。