2013-05-17 87 views
1

我試圖遵循示例代碼來簡單地在黑色背景上顯示矩形,但似乎並未顯示。我做的是無法在openGL中渲染形狀

private static void initGL(){ 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(0,Display.getWidth(),0,Display.getHeight(),-1,1); 
    glMatrixMode(GL_MODELVIEW); 

    glDisable(GL_DEPTH_TEST); //2D mode 

    glColor3f(0.5f, 0.0f, 1.0f); 
    glBegin(GL_QUADS); 
     glVertex2f(-0.75, 0.75); 
     glVertex2f(-0.75, -0.75); 
     glVertex2f(0.75, -0.75); 
     glVertex2f(0.75, 0.75); 
    glEnd(); 
} 

它不顯示除黑色背景之外的任何內容。有誰知道我可能做錯了什麼?我在eclipse中使用lwjgl。

回答

1

首先第一件事情:你只需要你的程序中,只有一次運行整個

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrtho(0,Display.getWidth(),0,Display.getHeight(),-1,1); 
glMatrixMode(GL_MODELVIEW); 

的事情,你跑Display.create()後不久可能。

此外,您使用錯誤的頂點鑲嵌。你寫

glVertex2f(-0.75, 0.75); 
glVertex2f(-0.75, -0.75); 
glVertex2f(0.75, -0.75); 
glVertex2f(0.75, 0.75); 

這意味着吸取(-0.75,-0.75)像素到(0.75,0.75)像素的矩形。這太小而無法察覺。我的猜測是你假設glVertex2f處理顯示寬度的分數。它不是。 glVertex2f處理實際的座標,它只是允許小數像素,不像glVertex2i(這是有用的信不信,它有助於更​​平滑的動畫)。喜歡的東西

glVertex2f(100F, 100F); 

地方頂點在(100,100),並且實際上等同於

glVertex2i(100, 100); 

另外請記住,負像素將被渲染到屏幕,因爲OpenGL的原點座標系統(0,0)位於左下角並且像數學課程中座標系統的第一個象限一樣,不像傳統的左上角具有(0,0)的計算機座標系統。

至於黑色背景,LWJGL的Display默認爲黑色背景,所以建議繪製一個四邊形,其背景色可以覆蓋整個顯示屏的寬度和高度。一個四核並不會真正影響你的表現。

+1

請注意,glVertex並不總是直接映射到像素,只有當您將正交座標系設置爲等於顯示大小時纔會這樣做。如果OP將使用一個身份正交矩陣而不是從屏幕寬度/高度派生的矩陣,那麼他的-75到75平方將會填滿屏幕的中間50%。 – Tim

+1

*「你只需要在你的程序中運行一次」* - 不,這是一種常見的誤解(雖然它適用於他的案例和許多其他簡單的案例,但它並不像你想象的那麼好)。 –

+0

非常感謝大家!修正了問題 – nemesis

0

glVertex2f使用與您的glOrtho相同的尺寸單位,因此除非您的顯示寬度和高度以單位爲單位,如10或更小,否則您可能看不到任何東西!

+1

雖然這不像* Leo *的答案那樣具有解釋性,但它在「glVertex」和「glOrtho」調用之間繪製了更好的連接。 –