2013-01-16 179 views
3

我剛開始學習LWJGL/OpenGL來創建一個3D遊戲,所以我從小開始嘗試做一個簡單的2D行顯示。 窗口加載正常,尺寸正確,但沒有任何東西在畫面上繪製。有一個空白的屏幕,我似乎沒有對代碼做任何更改影響在屏幕上繪製的內容。這可能是因爲我對如何正確執行此操作缺乏瞭解,或者可能是我的代碼/計算機出現問題。我嘗試添加和刪除各種東西給我的初始化代碼,如glEnable(GL_TEXTURE_2D)和glDisable(GL_TEXTURE_2D),我已經嘗試在渲染代碼中調用pushMatrix和popMatrix,我試圖在GL11初始化代碼中定義視口,但沒有任何似乎在工作。我的代碼如下:LWJGL OpenGL黑色屏幕

import static org.lwjgl.opengl.GL11.*; 
import org.lwjgl.LWJGLException; 
import org.lwjgl.opengl.*; 

public class Main { 
    public Main(String[] args) throws LWJGLException{ 
     Logging.info("Starting up "+Info.title+" v"+Info.version+"!"); 
     initDisplay(); 
     initGL11(); 
     startGameLoop(); 
    } 
    public static void main(String[] args) throws LWJGLException{ 
     new Main(args); 
    } 
    public void initDisplay(){ 
     try { 
      Logging.info("Initializing display..."); 
      Display.setDisplayMode(new DisplayMode(800, 600)); 
      Display.setTitle(Info.title); 
      Display.create(); 
      Logging.info("Display initialized!"); 
     } catch (LWJGLException e) { 
      Logging.severe(e); 
      Display.destroy(); 
     } 
    } 
    public void initGL11() throws LWJGLException{ 
     glMatrixMode(GL_PROJECTION); 
     glLoadIdentity(); 
     glOrtho(0f, 800f, 600f, 0f, 0f, 1f); 
     glMatrixMode(GL_MODELVIEW); 
     glLoadIdentity(); 
    } 
    public void startGameLoop(){ 
     while(!Display.isCloseRequested()){ 
      glBegin(GL_LINE); 
       glColor3f(1f,0f,0f); 
       glVertex2f(0f,0f); 
       glVertex2f(1f,1f); 
      glEnd(); 

      Display.update(); 
      Display.sync(60); 
     } 
     Logging.info("Closing down!"); 
     Display.destroy(); 
     System.exit(0); 
    } 
} 

日誌和信息類只是一些類,控制System.out和存儲靜態變量靜態引用。這些不影響LWJGL或OpenGL,所以我沒有看到包括它們在內的很多觀點。

在我的構建路徑,我有lwjgl.jarlwjgl_util.jarslick_util.jar和當地人都與正確lwjgl.jar。開始項目時我沒有錯誤,輸出正常。我不知道爲什麼我仍然黑屏。如果它有任何用處,我會按照this教程系列創建我的項目,並且它在視頻中似乎可以正常工作。

回答

1
glOrtho(0f, 800f, 600f, 0f, 0f, 1f); 
... 
glVertex2f(0f,0f); 
glVertex2f(1f,1f); 

嘗試提交與您的近剪裁平面不重合的幾何體。

或調整近裁剪平面:

glOrtho(0f, 800f, 600f, 0f, -1f, 1f); 

我也建議偶爾清除幀緩衝區。

+0

我改變了從點(0.1,0.1)到點(0.5,0.4)繪製的幾何代碼,但仍然出現黑屏。然後,我嘗試將glOrtho代碼更改爲您的建議,但仍然沒有任何區別。我還添加glClear(GL_COLOR_BUFFER_BIT)作爲我while循環內部的第一行,但屏幕仍然是黑色的。 – daviga404

+0

你的新分數仍然在Z = 0。 – genpfault

+0

@ user1301590:另外,你確定窗口是*完全*空白嗎?檢查左上角的紅色像素。或者使用'glVertex2f(800f,600f)'作爲第二點。 – genpfault

1

您忘記了打電話給glClear(GL_COLOR_BUFFER_BIT)。在繪製之前應該始終調用它。