2012-05-28 58 views
0

我對OpenGL很陌生,所以我試圖繪製一個紋理的2D矩形。我不知道爲什麼,但這不起作用:OpenGL不會繪製,爲什麼?

GL11.glMatrixMode(GL11.GL_PROJECTION); 
    GL11.glLoadIdentity(); 
    GL11.glViewport(0, 0, frameWidth, frameHeight); 
    GL11.glOrtho(0, 640, 0, 480, 0, 128); 
    GL11.glEnable(GL11.GL_TEXTURE_2D); 
    GL11.glBindTexture(GL11.GL_TEXTURE_2D, renderer.getTexture("/textures/menu/title.png")); 
    GL11.glEnable(GL11.GL_ALPHA_TEST); 
    GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F); 
    GL11.glBegin(GL11.GL_QUADS); 
    GL11.glTexCoord2f(0, 0); 
    GL11.glVertex3f(-frameWidth/2, -frameHeight/2, -1); 
    GL11.glTexCoord2f(1, 0); 
    GL11.glVertex3f(+frameWidth/2, -frameHeight/2, -1); 
    GL11.glTexCoord2f(1, 1); 
    GL11.glVertex3f(+frameWidth/2, +frameHeight/2, -1); 
    GL11.glTexCoord2f(0, 1); 
    GL11.glVertex3f(-frameWidth/2, +frameWidth/2, -1); 
    GL11.glEnd(); 
    GL11.glEnable(GL11.GL_CULL_FACE); 
    GL11.glCullFace(GL11.GL_BACK); 

frameWidth是窗口的寬度,frameHeight是高度。

+6

您需要在您的問題中包含更多信息。語言,圖書館,平臺等有很多事情可能導致這種情況。首先,確保你有一個有效的上下文,並且它是活躍的。接下來,確保您的紋理正確加載並綁定到紋理單元。嘗試從一些簡單的示例代碼開始,例如繪製彩色三角形,以確保您的設置是正確的。然後轉到上面的代碼。 – gavinb

+4

那麼,如果它不起作用,它做了什麼? –

回答

0

您應該在渲染之前調用glEnable(GL_CULL_FACE); glCullFace(GL_BACK)。如果您使用的是2D的glOrtho,則應該使用glOrtho(..., ..., ..., ..., -1, 1);並將glVertex2f用於2D頂點。

+0

與這個問題有關的實際面對剔除的方式是什麼?實際上如何面對剔除會影響2D渲染?它應該是一個評論,而不是一個答案。 –

3

因爲您實際上沒有寫出錯誤的地方,所以我只能猜測,但在這裏,您指定了z在範圍內(0,128)的正交投影。

GL11.glOrtho(0, 640, 0, 480, 0, 128); 

然後把你的頂點與z = -1。當然,它不會被繪製,因爲所有的頂點都會被裁剪掉。

GL11.glVertex3f(-frameWidth/2, -frameHeight/2, -1); 

嘗試改變glOrthogluOrtho2D(或硬編碼當量),和所有的頂點glVertex2f