【问题标题】:Pass custom attributes to a custom fragment shader将自定义属性传递给自定义片段着色器
【发布时间】:2012-07-20 16:29:21
【问题描述】:

是否可以将自定义属性传递给片段着色器,我知道我可以通过GLES20.glVertexAttribPointer 将属性传递给顶点着色器,但是如何将浮点[] 传递给片段着色器?

【问题讨论】:

    标签: android opengl-es opengl-es-2.0 shader


    【解决方案1】:

    没有。

    如果您想将制服传递给片段着色器,您可以轻松地做到这一点(参见任何教程)。但是,如果您想要类似于每个顶点属性的东西,那么这样做是没有意义的。您还可以做的是将属性传递给顶点着色器,然后在顶点着色器中将它们作为变量传递给片段着色器。它们将在图元中进行插值,并作为片段着色器的输入提供。

    【讨论】:

    • 蒂姆,这个答案对我来说真的很到位,只是制服、属性和变量如何协同工作。谢谢!
    • 可以控制插值吗?例如,在(手电筒)光源的情况下,您不希望在用于每个正方形的三角形中产生高光。遗憾的是,你得到的不是圆形 O,而是带有 \ 或 / 的 O。
    【解决方案2】:

    蒂姆的回答当然是正确的。

    一种可能的解决方法是将float 值存储在二维纹理中,并将纹理坐标(和值的数量)传递给着色器。但是,如果每个顶点有大量浮点值(因为每个片段的所有纹理查找),这可能会变得非常慢。另一个问题是,如果您有很多顶点,这会导致纹理非常大。 无论如何,在某些情况下,这种方法可能很有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-16
      • 2018-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-07
      • 1970-01-01
      • 2019-12-17
      相关资源
      最近更新 更多