Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用fog在OpenGL中未正确绘制线?_Opengl_Fog - Fatal编程技术网

使用fog在OpenGL中未正确绘制线?

使用fog在OpenGL中未正确绘制线?,opengl,fog,Opengl,Fog,请看一下: 问题是: 网格绘制得非常精细,没有雾。启用雾时,垂直线将消失。然后我向左旋转一点,所有的线都开始看不见了;如果我旋转更多,它们就会完全消失。这似乎取决于视角。我认为这可能是照明的问题,但我把它关掉了,结果是一样的 我也尝试了不同的雾类型,但结果是一样的。如果我向下看(与网格平面成90º角),我可以清楚地看到所有网格线 小狗的这种行为是怎么回事?能修好吗 代码非常基本,但在这里,它很重要: main(): renderScene(): 在不了解线的绘制方式的情况下,我假设您正在为网格

请看一下:

问题是:

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

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

小狗的这种行为是怎么回事?能修好吗

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

main():

renderScene():


在不了解线的绘制方式的情况下,我假设您正在为网格上的每条水平线和垂直线绘制一条线雾方程仅在顶点处求值,因此,如果只有顶点位于直线的最末端,则最终将得到特殊的人工制品,例如您看到的那些

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

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

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

因此,如果在中心添加一个顶点,它现在将计算出中心是明亮的。添加的顶点越多,亮度越精确

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

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