glDrawElements和平面着色

Wes*_*Dec 10 opengl opengl-3

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

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

Nic*_*vre 9

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

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

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

  • @Arne:我不是专家,所以如果我错了,其他人可以纠正我,但我认为不可能.没有三角属性这样的东西.您必须从几何着色器中的顶点属性派生它. (3认同)