2013-02-08 105 views
0

我正在尋找在OpenGL中繪製3D對象,但最好的辦法是什麼?我正在考慮在2D中繪製它的側面輪廓,然後將它充實成3D,但這有可能嗎?我認爲這樣做會更容易,然後直接進入3D,但如果你不能,那麼ID就是在浪費我的時間。Java openGL - 繪製3D對象

我也無法弄清楚如何用反射來增加天空甚至是海洋,這是否容易完成?


gl.glClear(GL.GL_COLOR_BUFFER_BIT); 
    gl.glColor3f(1.0f, 1.0f, 1.0f); 

    gl.glPushMatrix(); 
    gl.glTranslatef(-1.0f, 0.0f, 0.0f); 
    gl.glRotatef((float) shoulder, 0.0f, 0.0f, 1.0f); 
    gl.glTranslatef(1.0f, 0.0f, 0.0f); 
    // gl.glPushMatrix(); 
    gl.glScalef(2.0f, 0.4f, 1.0f); 
    glut.glutWireCube(1.0f); 
    // gl.glPopMatrix(); 

    gl.glTranslatef(1.0f, 0.0f, 0.0f); 
    gl.glRotatef((float) elbow, 0.0f, 0.0f, 1.0f); 
    gl.glTranslatef(1.0f, 0.0f, 0.0f); 
    // gl.glPushMatrix(); 
    gl.glScalef(2.0f, 0.4f, 1.0f); 
    glut.glutWireCube(1.0f); 
    // gl.glPopMatrix(); 

    gl.glTranslatef(1.0f, 1.0f, 1.0f); 
    gl.glRotatef((float) hand, 0.0f, 0.0f, 1.0f); 
    gl.glTranslatef(1.0f, 0.0f, 0.0f); 
    // gl.glPushMatrix(); 
    gl.glScalef(2.0f, 0.4f, 1.0f); 
    glut.glutWireCube(1.0f); 
    // gl.glPopMatrix(); 

我剛一直在努力的隨機數,試圖得到它的工作,但沒有這樣的運氣至今!

回答

1

好的首先,根據你想要做什麼,反射可能很難。在嘗試這樣的事情之前,你一定需要學習更多的OpenGL。其次,3D對象需要一些更多的矩陣的東西,這是一個例子,從我的init方法在我的3D遊戲:

private void initGl() { 
    glViewport(0, 0, Display.getWidth(), Display.getHeight()); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    GLU.gluPerspective(45.0f, Display.getWidth()/Display.getHeight(), 1.0f, 100.0f); 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f); 
    glClearDepth(1.0f); 
    glDepthFunc(GL_LEQUAL); 
    glEnable(GL_DEPTH_TEST); 
    glShadeModel(GL_SMOOTH); 
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); 
    glEnable(GL_FOG); 
    glFogi(GL_FOG_MODE, GL_EXP2); 
    glFogf(GL_FOG_DENSITY, density); 
    glHint(GL_FOG_DENSITY, GL_FASTEST); 
    glEnable(GL_CULL_FACE); 
    glCullFace(GL_BACK); 
} 

您還需要清除緩存這樣繪製前:

 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

當你說出一個2D對象時,你幾乎是正確的。如果我們仍在使用即時模式(glBegin()/glEnd()),則您的方法是正確的。然而,即時模式現在已經被棄用,我們通常使用VBOs。如果您使用LWJGL,我會建議您在YouTube上搜索編碼大全,他有一個關於VBOs和高級渲染的視頻,以及我學習它們的方式!

祝你好運在3D世界中,它不是一件容易的事情,但它(在我看來),當你得到一些工作時,它比2D更令人滿意。

此外,請考慮投資RedBook,其全部關於LWJGL。

+0

感謝您的回覆,即時通訊使用JOGL,我知道有點不同於LWJGL,我有一個示例代碼,它使用2個3D對象,但是當我複製一個代碼並編輯翻譯數字時,它似乎沒有做任何事情。 它似乎也幾乎沒有Java/JOGL openGL上的任何教程! – thrash 2013-02-08 18:33:41

+0

你能發佈代碼嗎?我會看看它。 – 2013-02-08 18:48:32

+0

非常感謝,只是編輯了原來的問題! – thrash 2013-02-08 18:56:00