我在OpenGL中用3D绘制立方体和线条网格:
glBegin(GL_QUADS);
...
glEnd();
glBegin(GL_LINES);
...
glEnd();
现在,独立于顺序(如果我首先绘制线条或首先绘制四边形)并且独立于位置,它总是发生线条在立方体上绘制。我以为OpenGL是从前到后画的。
我尝试使用的是:
glEnable(GL_BLEND);
glBlendFunc (GL_ONE, GL_ONE);
哪个确实有效,但立方体的一部分现在是透明的。
我还尝试glDepthFunc(GL_NEVER)
禁用glEnable (GL_DEPTH_TEST)
,但我遇到的问题是多维数据集显示为透明。
有没有人提示要克服这个问题?
答案 0 :(得分:1)
如果你想在背景中绘制线条,首先绘制它们(以及背景的其余部分),清除深度缓冲区,然后渲染场景的其余部分。
或者你可以给线条一个深度,使它们总是落后于其他所有东西,但是你必须确保你的游戏世界对象都不会落后于它。
答案 1 :(得分:1)
现在,独立于顺序(如果我先绘制线条或首先绘制四边形)并且与位置无关,则总是会发生线条在立方体上绘制。
IF 您的线条有适当的深度,然后您忘记启用深度缓冲区。如果启用了深度缓冲区,则必须确保用于初始化OpenGL请求深度缓冲区的库。
我认为OpenGL是从前到后画的。
没有。 OpenGL以您指定的顺序绘制多边形。没有任何类型的自动分类。
有没有人提示要克服这个问题?
好吧,你可以清除深度缓冲区,但这将是缓慢而低效的。从技术上讲,你几乎不应该这样做。
glDepthMask(GL_FALSE)
将禁用写入深度缓冲区。即,在该调用之后绘制的任何对象都不会更新深度缓冲区,但会使用已存储的数据。它经常用于粒子系统。所以请调用glDepthMask(GL_FALSE)
,绘制“行”,调用glDepthMask(GL_TRUE)
,然后绘制多维数据集。
如果将glDepthMask(GL_FALSE)
与glDepthFunc(GL_ALWAYS)
结合使用,则始终会绘制对象,完全忽略深度缓冲区(但深度缓冲区不会更改)。