不同的OpenGL ES顶点颜色插值模式?

时间:2013-11-11 22:23:19

标签: opengl-es opengl-es-2.0

我正在尝试在photoshop中实现一个简单的线性渐变。顶点之间的颜色插值似乎是通过(加法?)数值而不是你在“油漆混合”中所期望的那样。这是一个绿色和红色的视觉示例:

Gradient1 Gradient2

左边的那个大致是我得到的,我想要实现右边的那个。

有没有简单的方法来实现这个目标?

1 个答案:

答案 0 :(得分:3)

正如@Andon评论的那样,使用纹理系统是一种很好的方法。这就是你需要的:

  1. 在顶点缓冲区中设置属性时,为每个顶点指定一个(或多个,但只需要一个用于此技巧)纹理坐标。
  2. 在顶点着色器中,读取该属性并将其写入变量,以便对其进行插值以便在片段着色器中使用。
  3. 在片段着色器中,读取变化 - 这将告诉您应该在当前片段中沿着渐变渐变的距离;即混合因子。
  4. 此时,您有两种选择:

    • 使用看起来像您想要的渐变的1d纹理图像,并使用texture2D着色器函数和您获得的变化纹理坐标查找它。这将获取相应的纹理颜色,以便您可以将其输出到gl_FragColor
    • 计算片段着色器中的颜色混合。如果您将着色器中的端点颜色作为制服传递,则可以根据混合因子使用GLSL中可以执行的任何数学运算(包括Photoshop blend modes等内容)来组合它们。