4

我一直在尝试在我的 OpenGL 应用程序中创建一个 hud。环顾四周,似乎方法是使用正射投影,但到目前为止,我还无法让程序正确渲染。发生的事情不是在我的显示器上渲染,而是出现了奇怪的图形故障,如下所示:

在此处输入图像描述

如果我注释掉 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

2 回答 2

4

完成 HUD 渲染后,您需要重新启用深度写入

glDepthMask(GL_TRUE);
于 2011-12-03T20:29:51.370 回答
2

当您在渲染 HUD 时清除缓冲区时,到目前为止已绘制的所有内容(您的 3D 场景)也将被清除。所以不要两次清除缓冲区。

于 2011-12-03T20:02:49.683 回答