Opengl 元素与平面明暗处理
在使用GLDrawerElements绘制对象时,是否可以在OpenGL中实现平面着色,如果可以,如何实现?如果可能的话,理想的方法是只为每个三角形计算一次法线Opengl 元素与平面明暗处理,opengl,opengl-3,Opengl,Opengl 3,在使用GLDrawerElements绘制对象时,是否可以在OpenGL中实现平面着色,如果可以,如何实现?如果可能的话,理想的方法是只为每个三角形计算一次法线 解决方案必须只使用可编程管道(核心配置文件)。遗憾的是,唯一的方法是复制所有顶点,因为属性是逐顶点的,而不是逐三角形的 仔细想想,这就是我们在即时模式下所做的…确实有一些方法可以避免重复顶点,每个顶点都有一些限制(至少我可以用有限的OpenGL经验想到这些限制) 我可以看到两种解决方案,它们可以为每个三角形上的法线提供一个常量值: 在
解决方案必须只使用可编程管道(核心配置文件)。遗憾的是,唯一的方法是复制所有顶点,因为属性是逐顶点的,而不是逐三角形的
仔细想想,这就是我们在即时模式下所做的…确实有一些方法可以避免重复顶点,每个顶点都有一些限制(至少我可以用有限的OpenGL经验想到这些限制) 我可以看到两种解决方案,它们可以为每个三角形上的法线提供一个常量值:
- 在着色器中将输入声明为
,并通过选择哪个顶点给出其值;很快,但是你会得到一个顶点的法线作为整个三角形的法线,这看起来可能不正确flat
- 使用几何体着色器获取三角形并输出三角形,以计算每个面的单个法线。这是最灵活的方法,允许您控制产生的效果,但速度可能会很慢(显然,这需要具备几何体着色器功能的硬件)