glDrawElements和平面着色

时间:2011-05-19 09:40:29

标签: opengl opengl-3

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

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

2 个答案:

答案 0 :(得分:9)

确实有一些方法可以解决这个问题,而不会重复顶点,每个顶点都有一些限制(至少我能用我有限的OpenGL经验来考虑这些限制)。

我可以看到两个解决方案,可以为每个三角形的法线提供一个恒定值:

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

答案 1 :(得分:0)

可悲的是,唯一的方法是复制所有顶点,因为属性是按顶点而不是每个三角形

当你考虑它时,这就是我们在即时模式下所做的......