【问题标题】:OpenGL - glVertex replaces drawn points?OpenGL - glVertex 替换绘制点?
【发布时间】:2011-05-04 21:54:17
【问题描述】:

在下面的 OpenGL 代码中,会发生什么?

glNormal3f( nx1, ny1, nz1 )
glVertex3f( x1,y1,z1 )
glNormal3f( nx2, ny2, nz2 ) //different Normal
glVertex3f( x1,y1,z1 )      //same vector

用词:
我有一个法线点,如果我用另一个法线再次创建该点,该点会更改他的旧法线向量,还是忽略上次调用?

当我试图以更平滑的方式用光照渲染球体时出现了这个问题 使用法线。

【问题讨论】:

    标签: opengl replace


    【解决方案1】:

    glNormal3f() 只是设置当前的正常值,它将保持这种状态,直到下一次 glNormal3f() 调用。

    每个glVertex3f() 复制当前法线、颜色和纹理坐标,并将一个完整的顶点提交到 GL 命令队列。

    【讨论】:

      【解决方案2】:

      它只会在完全相同的位置绘制两者。点被“识别”为位于同一位置、更新法线等的幕后没有魔法。

      【讨论】:

      • 法线呢?想象两个共享一个共同边的三角形......如果我将法线重新分配给点,三角形面是否会改变它在照明方面是正常的??
      • 这在一定程度上取决于您如何定义事物。你的代码在这些顶点和法线周围是什么样子的?您可以拥有“每个顶点”法线,它是连接到该顶点的面的法线的归一化平均值,以获得平滑的阴影。或者只是面法线(可能写为每个顶点的单独法线)具有平坦的阴影三角形。在后一种情况下,您可能会得到您在代码中显示的内容。同一个顶点以多条法线出现多次。
      • 好的。 “每个顶点”法线是什么意思?平滑的阴影是如何实现的?
      • 这给出了我能给出的最好的解释:lighthouse3d.com/opengl/terrain/index.php3?normals ;)
      • 好的!多谢。我明白。就我而言,我正在绘制一个球体......我试图计算周围法线的总和,但我没有必要。我为每个顶点分配了一个等于归一化半径的法线,它起作用了。为了实现这种平滑,openGl 需要一些 enable() 选项,或者它是内置的?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-18
      相关资源
      最近更新 更多