用于3D应用程序的OpenGL 2D hud

4
我一直在尝试在我的OpenGL应用程序中创建一个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();
2个回答

4

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

glDepthMask(GL_TRUE);

完成了,但是这个四边形实际上并没有在屏幕上渲染出来。 - Katherine1

2
清除 HUD 缓冲区时,已经绘制的内容(包括 3D 场景)也会被清除。因此不要重复清除缓冲区。

我在hud部分注释掉了glClear,但对程序没有任何视觉影响。 - Katherine1
尝试启用Alpha混合并将您的四边形绘制为透明以进行检查。似乎您的四边形相对于窗口大小可能太大了。我不知道为什么它不是蓝色的,也看不到红色三角形来自哪里。在绘制HUD之前尝试向后移动一点(平移0,0,-1或类似)。 - cli_hlt
当我移动时,我有一个黑色的东西,我不知道它与迷宫的初始视图相匹配(它会改变形状以匹配我开始查看的走廊配置),这会遮挡我的视线并导致各种奇怪的现象。 - Katherine1
我把四元组整个注释掉了,但在视觉上没有任何变化。 - Katherine1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接