我创造了2个圆圈,其中一个围绕另一个旋转,就像月亮在太阳周围旋转一样。
我向下平移z轴然后围绕y轴旋转以使对象进入轨道。我需要弄清楚矩阵的乘法 yRotation * ZTranslation *(0,0,0,1)
即
(cos(angle) 0 sin(angle) 0 ) ( 1 0 0 0 ) ( 0 )
( 0 1 0 0 ) ( 0 1 0 0 ) ( 0 )
(-sin(angle) 0 cos(angle) 0 ) ( 0 0 1 zTran ) ( 0 )
( 0 0 0 1 ) ( 0 0 0 1 ) ( 1 )
我该怎么做?
答案 0 :(得分:0)
由于您在谈论圈子,我假设您正在制作2D应用程序。
在OpenGL中,您有以下坐标:
Y
|
|
|
O---- X
/
/
Z
这意味着您的2D应用程序位于X-Y空间中,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
,则在翻译之后将轮换