【问题标题】:Lines not drawn correctly in OpenGL with fog?带雾的OpenGL中没有正确绘制线条?
【发布时间】:2011-03-25 23:23:28
【问题描述】:

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

问题:

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

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

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

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

main():

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

【问题讨论】:

    标签: opengl fog


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-30
      • 1970-01-01
      • 1970-01-01
      • 2017-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多