使用 glDrawElements 绘制对象时,是否可以在 OpenGL 中实现平面着色,如果可以,如何实现?如果可能的话,理想的方法是只为每个三角形计算一次法线。
该解决方案只能使用可编程流水线(核心配置文件)。
确实有一些方法可以在不复制顶点的情况下解决这个问题,但每个顶点都有一些限制(至少我能以有限的 OpenGL 经验想到的那些)。
我可以看到两种解决方案,它们可以为每个三角形的法线提供一个恒定值:
flat
选择哪个顶点给出其值;快,但你会得到一个顶点的法线作为整个三角形的法线,这可能看起来不正确可悲的是,这样做的唯一方法是复制所有顶点,因为属性是每个顶点而不是每个三角形
仔细想想,这就是我们在即时模式下所做的……