2012-02-01 105 views
3

我在2D中工作,我試圖圍繞一個對象旋轉整個世界(包括對象),並保持在屏幕中心的一個對象。OpenGL旋轉對象,同時保持它在屏幕中心

這裏是我當前的代碼來改造世界,所有的渲染之後完成的:

硬件及HH半寬度和屏幕的高度。 p是對象座標。

float hw = 400; 
float hh = 300; 

float x = hw - p.x; 
float y = hh - p.y; 

glTranslatef(x, y, 0); 
glTranslatef(-hw, -hh, 0); 
glRotatef(level->angle, 0, 0, 1); 
glTranslatef(hw, hh, 0); 

但是,它沒有按預期工作。任何幫助將不勝感激。

+0

如果您只想旋轉部分場景,請推入矩陣堆棧,渲染該部分並彈出堆棧?您可能想要顯示一些代碼實際代碼。 – pmr 2012-02-01 23:18:11

+0

也許我不清楚,我想旋轉所有東西,包括對象周圍的物體,將它保持在屏幕的中心。我可以把它放在屏幕的中心,但是當我旋轉時,我無法讓它留在那個地方。 – 2012-02-01 23:24:57

回答

3

嘗試使用glPushMatrix()和glPopMatrix()。所以,你必須:

glTranslatef(x, y, 0); 
glPushMatrix(); 
glTranslatef(-hw, -hh, 0); 
glRotatef(level->angle, 0, 0, 1); 
glTranslatef(hw, hh, 0); 
glPopMatrix(); 

glPushMatrix()保存當前的矩陣(所有的翻譯,旋轉等),並建立了一個新的Matrix。該矩陣是相對於舊矩陣的,因此如果在不推動矩陣的情況下進行平移,則將旋轉該矩陣中的(0 | 0)點。如果您設置了一個新的矩陣,它會在您舊矩陣中的位置創建該矩陣。