OpenGL在GL_四边形的顶部绘制GL_线

OpenGL在GL_四边形的顶部绘制GL_线,opengl,Opengl,我正在OpenGL中绘制三维立方体和线网格: glBegin(GL_QUADS); ... glEnd(); glBegin(GL_LINES); ... glEnd(); 现在,与顺序无关(如果我先画直线或四边形),与位置无关,直线总是画在立方体上。我以为OpenGL是前后画的 我尝试的是使用: glEnable(GL_BLEND); glBlendFunc (GL_ONE, GL_ONE); 这确实有效,但立方体的一部分现在是透明的。 我还尝试禁用了glDepthFunc(GL\u N

我正在OpenGL中绘制三维立方体和线网格:

glBegin(GL_QUADS);
...
glEnd();

glBegin(GL_LINES);
...
glEnd();
现在,与顺序无关(如果我先画直线或四边形),与位置无关,直线总是画在立方体上。我以为OpenGL是前后画的

我尝试的是使用:

glEnable(GL_BLEND);
glBlendFunc (GL_ONE, GL_ONE);
这确实有效,但立方体的一部分现在是透明的。 我还尝试禁用了
glDepthFunc(GL\u NEVER)
,禁用了
glEnable(GL\u DEPTH\u TEST)
,但我遇到了同样的问题,立方体看起来是透明的


有没有人有办法克服这个问题

如果要在背景中绘制线条,只需先绘制线条(以及背景的其余部分),清除深度缓冲区,然后渲染场景的其余部分

或者你可以给线条一个深度,这样它们就会一直在其他东西后面,但是你必须确保你的游戏世界中没有任何物体在后面

现在,与顺序无关(如果我先画直线或四边形),与位置无关,直线总是画在立方体上

如果您的行具有适当的深度,则忘记启用深度缓冲区。如果启用了深度缓冲区,则必须确保用于初始化OpenGL请求的深度缓冲区的库

我以为OpenGL是前后画的

事实并非如此。OpenGL按照指定的顺序绘制多边形。没有任何类型的自动分拣

有没有人有办法克服这个问题

嗯,您可以清除深度缓冲区,但这将是缓慢和低效的。从技术上讲,你几乎不应该这样做

glDepthMask(GL\u FALSE)
将禁用对深度缓冲区的写入。i、 e.调用后绘制的任何对象都不会更新深度缓冲区,但将使用已存储的数据。它经常用于粒子系统。所以调用
glDepthMask(GL\u FALSE)
,画“线”,调用
glDepthMask(GL\u TRUE)
,然后画立方体


如果将
glDepthMask(GL\u FALSE)
glDepthFunc(GL\u ALWAYS)
组合,则始终绘制对象,完全忽略深度缓冲区(但深度缓冲区不会更改)。

您想要的结果是什么?我不清楚你到底想在别人面前做什么。绘制立方体时需要启用GL_DEPTH_测试,否则立方体的背面可能会覆盖立方体的可见部分。我希望立方体始终绘制在线条的前面。所以这些线条有点像背景。