2012-05-24 56 views
0

我在移動使用C.移動特定的對象在OpenGLÇLinux的

在OpenGL一個特定對象的問題

對象代碼

glClearColor(0.0, 0.0, 0.0, 0.0); 
glClear(GL_COLOR_BUFFER_BIT); 
glColor3f(1, 0.73, 0.06); 
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0); 
glPushMatrix(); 
glMatrixMode(GL_MODELVIEW); 
glRotatef(0,PacX,PacY,0); 
glBegin(GL_QUADS); 
    glVertex2f(ax, ay); 
    glVertex2f(bx, by); 
    glVertex2f(cx, cy); 
    glVertex2f(dx, dy); 
glEnd(); 
glPopMatrix(); 
glFlush(); 

這將繪製一個正方形,但在窗口我有其他對象,所以當我嘗試移動glTranslatef()只有廣場它移動所有的對象,有沒有一種方式或變量,我可以存儲一個指針或ID到廣場,所以我只能移動廣場?

回答

2

您需要保存和恢復每個對象的變換矩陣,以便每個對象都有自己的矩陣。

查看glPushMatrix()函數。

+0

但glPushMatrix不會返回任何值,所以我如何存儲一個對象值並將其移回? –

+0

@ user1343820:OpenGL不「存儲對象」,它不保留場景。它只是繪製點,三角形的線條。您發送繪圖命令,OpenGL繪製每條線,點或三角形,並忘記它。如果你想改變某些東西,你必須重畫場景。 – datenwolf

+0

移動和對象我使用glTranslatef(x,y,z),但它移動場景中的所有對象,我的問題是,有可能使用glTranslatef()只移動一個特定的對象? –

1

閱讀關於OpenGL顯示列表,並在圖形卡中分配顯示列表。從OpenGL的編程指南

/* Create display list with Torus and initialize state*/ 
static void init(void) 
{ 
    theTorus = glGenLists (1); 
    glNewList(theTorus, GL_COMPILE); 
    torus(8, 25); 
    glEndList(); 

    glShadeModel(GL_FLAT); 
    glClearColor(0.0, 0.0, 0.0, 0.0); 
} 

其中torus(8, 25)調用則是由具有周圍glNewList(...)glEndList()功能捕獲到theTorus元素的功能。然後繪圖看起來更像

void display(void) 
{ 
    glClear(GL_COLOR_BUFFER_BIT); 
    glColor3f (1.0, 1.0, 1.0); 
    glCallList(theTorus); 
    glFlush(); 
} 

這意味着您可以通過調用各種glRotatef(...)等比例縮放和轉換的呼叫之前繪製圓環改變環境。

整個例子我一直在從can be accessed here提取參考文獻。

有了一些額外的數據結構,您可以保持對象在結構中的方向,將變換應用到環境中,然後繪製特定的顯示列表。不要記住在事後取消環境變換,然後您將有效地旋轉,移動或做任何事情到顯示列表中顯示的單個對象。

+0

是的,謝謝,我現在明白 –

+0

@HugoGonçalves我很高興聽到它。 –