2011-12-03 101 views
4

我一直試圖在OpenGL應用程序中創建hud。環顧四周,看起來這樣做的方式是用正投影,但到目前爲止我還沒有能夠讓程序正確渲染。正在發生的事情是不是呈現在我的顯示器頂部,我越來越奇怪的圖形毛刺在這裏看到:3D應用程序中的OpenGL 2D hud

enter image description here

如果我註釋掉的代碼HUD,一切都呈現完美。

glEnable(GL_DEPTH_TEST); 
glDepthFunc(GL_LESS); 

//Set up projection matrix 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
//Using gluPerspective. It's pretty easy and looks nice. 
gluPerspective(fov, aspect, zNear, zFar); 

//Set up modelview matrix 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

//3D rendering 

glDepthMask(GL_FALSE); 
glDisable(GL_DEPTH_TEST); 

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
gluOrtho2D(0,window_width,0,window_height); //left,right,bottom,top 

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

glColor3f(0.0,0.0,1.0); 
glBegin(GL_QUADS); 
    glVertex2f(50,50); 
    glVertex2f(50,100); 
    glVertex2f(100,100); 
    glVertex2f(100,50); 
glEnd(); 

回答

4

一旦你完成渲染HUD,則需要重新啓用深度寫入

glDepthMask(GL_TRUE); 
+0

這樣做,雖然四方實際上並沒有在屏幕上的任何地方渲染。 – Katherine1

2

當你渲染你的HUD當緩衝器清零,所有已 到目前爲止(3D場景)畫也將被清除。所以不要兩次清除緩衝區。

+0

我在HUD部分註釋掉glClear,而且對程序中沒有的視覺效果。 – Katherine1

+0

嘗試啓用alpha混合並繪製您的四邊形透明來檢查。看起來你的四元組可能與窗口大小相比太大了。我想知道 - 也看不出爲什麼 - 但它不是藍色的。以及紅色三角形的來源。嘗試向後移動(平移0,0,-1左右),然後繪製您的底座。 –

+0

當我移動時,我有一個黑色,我不知道什麼與迷宮的初始視圖相匹配(它改變了形狀以符合我在開始時看到的大廳的配置),它掩蓋了我的視線並導致所有我可以看到的奇怪的方式。 – Katherine1