2012-12-07 108 views
0

我创建了2个圆圈,其中一个绕另一个旋转,就像月亮绕着太阳旋转一样。Matrix Multiplication opengl围绕物体旋转

我向下翻译了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

什么不行? – chill

回答

0

既然你在谈论圈子,我假设你正在做一个2D应用程序。

在OpenGL中,您有以下坐标:

Y 
    | 
    | 
    | 
    O---- X 
/
/
Z 

这意味着你的2D应用是在X-Y空间,Z是perpendecular到显示器(和朝向外侧)。

因此,如果您有一个圆圈绕过另一个圆圈,那么您可能首先要在X-Y平面(例如Y轴)上平移该圆,然后对轴施加一个旋转。

所以,你的矩阵乘法应该是:

(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中,矩阵相乘在右边。所以如果你在glTranslatef之前写glRotatef,那么轮转将在之后应用翻译。