2012-12-07 106 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,那麼輪轉將在之後應用翻譯。