1

请看看这个:http: //imgur.com/a/S8eOC

问题:

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

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

这种行为是怎么回事?可以修复吗?

该代码非常基本,但如果它很重要,则在这里:

主要的():

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

渲染场景():

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);
4

1 回答 1

3

在不了解线条绘制方式的更多信息的情况下,我将假设您为网格上的每条水平线和垂直线绘制了一条线。雾方程仅在顶点进行评估,因此如果您唯一的顶点位于线条的最末端,您最终会得到特殊的伪影,例如您所看到的伪影。

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

我将在下面更详细地介绍别名的概念,这是您最有可能看到的。

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

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

祝好运并玩得开心点。:)

于 2011-03-26T01:45:42.707 回答