Opengl 元素与平面明暗处理

Opengl 元素与平面明暗处理,opengl,opengl-3,Opengl,Opengl 3,在使用GLDrawerElements绘制对象时,是否可以在OpenGL中实现平面着色,如果可以,如何实现?如果可能的话,理想的方法是只为每个三角形计算一次法线 解决方案必须只使用可编程管道(核心配置文件)。遗憾的是,唯一的方法是复制所有顶点,因为属性是逐顶点的,而不是逐三角形的 仔细想想,这就是我们在即时模式下所做的…确实有一些方法可以避免重复顶点,每个顶点都有一些限制(至少我可以用有限的OpenGL经验想到这些限制) 我可以看到两种解决方案,它们可以为每个三角形上的法线提供一个常量值: 在

在使用GLDrawerElements绘制对象时,是否可以在OpenGL中实现平面着色,如果可以,如何实现?如果可能的话,理想的方法是只为每个三角形计算一次法线


解决方案必须只使用可编程管道(核心配置文件)。

遗憾的是,唯一的方法是复制所有顶点,因为属性是逐顶点的,而不是逐三角形的


仔细想想,这就是我们在即时模式下所做的…

确实有一些方法可以避免重复顶点,每个顶点都有一些限制(至少我可以用有限的OpenGL经验想到这些限制)

我可以看到两种解决方案,它们可以为每个三角形上的法线提供一个常量值:

  • 在着色器中将输入声明为
    flat
    ,并通过选择哪个顶点给出其值;很快,但是你会得到一个顶点的法线作为整个三角形的法线,这看起来可能不正确
  • 使用几何体着色器获取三角形并输出三角形,以计算每个面的单个法线。这是最灵活的方法,允许您控制产生的效果,但速度可能会很慢(显然,这需要具备几何体着色器功能的硬件)

glProvokingVertex允许我在每个三角形中只存储一条法线吗?@Arne:我不是专家,所以如果我错了,其他人可以纠正我,但我认为这是不可能的。没有三角形属性这样的东西。您必须从几何体着色器中的顶点属性派生它。