2012-01-15 21 views
0

(使用OpenGL,GLUT,GLU和C) 我想在C中創建一個3D遊戲,並且我有相機移動,碰撞檢測和準備好的所有主要東西,但是我在第一個障礙失敗了。要創建我的矩形我使用絕對定位在OpenGL與C

glutSolidCube (2.0); 

而且我知道tranformations,規模和旋轉,但是我正在尋找如何將其放置在一個精確的位置。假設我有XYZ的3D空間。假設我有相機在5,5,20,朝向0,0,0(所以在一個角度),並想要放置一個立方體在5,2,10,然後另一個在-5,-2,20。我將如何使用這些絕對位置?此外,我將如何使用絕對大小,所以說我想在-5,-2,20的大小爲20,5,10。我如何在OpenGL中做到這一點?

回答

0

你將不得不使用的功能:

glTranslatef() 
glRotatef() 
glScalef() 

此外,還學習這些:

glPushMatrix() 
glPopMatrix() 

閱讀OpenGL reference瞭解詳情。

+0

啊,完美。謝謝。我只是使用glTranslatef,這可能是爲什麼它不起作用,Translate3f看起來是正確的。謝謝! – user1150512 2012-01-15 15:41:46

+0

既沒有glTranslate3f也沒有glRotate3f。 – datenwolf 2012-01-15 18:15:36

+0

糟糕,我的錯誤......也許我對'glColor3f()'或類似的東西感到困惑。 – 0605002 2012-01-15 18:18:27

0

首先忘掉glutSolidCube。 GLUT不是OpenGL的一部分,它只是一個小型的便利庫。

您必須瞭解OpenGL只處理點,線和變形。它不保留一個場景,但它僅僅繪製點,線和三角形。每一個都沒有任何拓撲結構的內涵。另外,OpenGL不應該被某些數學庫困惑。函數glTranslate,glRotate,glScale等是純粹的遺產,並且已經從當代OpenGL版本中刪除。

話雖這麼說...

說我有相機在5,5,20,看向0,0,0(因此,在一個角),想把它放到一個立方體,在5, 2,10,然後再在-5,-2,20。我將如何使用這些絕對位置?此外,我將如何使用絕對大小,所以說我想在-5,-2,20的大小爲20,5,10。我如何在OpenGL中做到這一點?

我會隨你已經知道(這芒老的OpenGL 1.1和GLUT)去:

void draw() 
{ 
    /* Viewport and projection really should be set in the 
     drawing handler. They don't belong into the reshape. */ 
    glViewport(...); 

    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    your_projection(); 


    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    gluLookAt(5, 5, 20, 0, 0, 0, 0, 1, 0); 

    glPushMatrix(); 
    glTranslatef(5, 2, 10); 
    draw_cube(); 
    glPopMatrix(); 

    glPushMatrix(); 
    glTranslatef(-5, -2, 20); 
    draw_cube(); 
    glPopMatrix(); 

    glPushMatrix(); 
    glTranslatef(-5, -2, 20); 
    glScalef(20, 5, 10); 
    draw_cube(); 
    glPopMatrix(); 
}