在具有雾的OpenGL中未正确绘制线条?

时间:2011-03-25 23:23:28

标签: opengl fog

请看一下: http://imgur.com/a/S8eOC

问题:

网格绘制完美无雾。启用雾时,垂直线消失。然后我向左旋转一点,所有线条开始变得不可见;如果我旋转得更多,他们就会完全消失。它似乎取决于视角。我认为这可能是照明的一个问题,但我把它关掉了,结果是一样的。

我也尝试了不同的雾类型但结果是一样的。如果我直视(与网格平面成90º角),我可以清楚地看到所有的网格线。

这种行为是什么小狗?可以修复吗?

代码是非常基本的,但在这里它是重要的:

主要():

glEnable(GL_FOG);
glHint(GL_FOG_HINT, GL_NICEST);

renderScene():

float fogColor[3] = {0.8f, 0.8f, 0.8f};
glFogfv(GL_FOG_COLOR, fogColor);
glFogi(GL_FOG_MODE, GL_EXP2);
glFogf(GL_FOG_DENSITY, 0.01f);

1 个答案:

答案 0 :(得分:3)

在不了解线条绘制方式的情况下,我将假设您为网格上的每条水平线和垂直线绘制一条线。 Fog方程只在顶点进行评估,所以如果你的唯一顶点位于直线的最末端,你最终会得到一些特殊的人工制品,比如你所看到的那些。

解决这个问题的主要方法是引入更多顶点;为每个交叉点构建一个顶点,并将每个交叉点连接起来以形成网格。这将导致更多的线和顶点,但你会得到正确的行为。

我将在下面详细介绍,以帮助解释别名的概念,这是您最有可能看到的。

请记住,在顶点处评估的任何值(例如顶点颜色,法线,纹理坐标)都将线性插值以覆盖它们之间的三角形/线。想象一下,我们希望屏幕中心的像素亮,边缘像素暗。 (严格的理论案例,但对解释很有用)。假设我们从一条边,一条中间和另一条边绘制一条线。假设我们只用2个顶点做这个,每个边缘一个。然后我们计算这两个顶点的亮度是暗的。然后,为了绘制线条,OpenGL在黑暗和黑暗之间进行插值以确定线条的颜色。线路无法知道它需要在中心保持明亮。

所以,如果你在中心添加一个顶点,它现在会计算出中心是明亮的。您添加的顶点越多,亮度就越准确。

祝你好运,玩得开心。 :)