【问题标题】:glDrawElements and flat shadingglDrawElements 和平面着色
【发布时间】:2011-05-19 09:40:29
【问题描述】:

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

解决方案只能使用可编程流水线(核心配置文件)。

【问题讨论】:

    标签: opengl opengl-3


    【解决方案1】:

    确实有一些方法可以在不复制顶点的情况下解决这个问题,但每个顶点都有一些限制(至少我能以有限的 OpenGL 经验想到的)。

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

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

    【讨论】:

    • glProvokingVertex 是否允许我每个三角形只存储一个法线?
    • @Arne:我不是专家,所以如果我错了其他人可以纠正我,但我认为不可能。没有三角形属性之类的东西。您必须改为从几何着色器中的顶点属性派生它。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-19
      • 1970-01-01
      • 2015-03-06
      • 2016-11-08
      • 2021-05-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多