1

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

渐变1渐变2

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

有没有简单的方法来实现这一点?

4

1 回答 1

3

正如@Andon 评论的那样,使用纹理系统是做到这一点的好方法。这是您需要的:

  1. 当您在顶点缓冲区中设置属性时,为每个顶点分配一个(或多个,但您只需要一个)纹理坐标。
  2. 在您的顶点着色器中,读取该属性并将其写入变量,以便对其进行插值以在片段着色器中使用。
  3. 在你的片段着色器中,阅读变化——这告诉你在当前片段中你应该沿着渐变坡道走多远;即混合因子。

此时,您有两个选择:

  • 使用看起来像您想要的渐变的一维纹理图像,并使用texture2D着色器函数和您获得的不同纹理坐标查找它。这将获取相应的纹素颜色,以便您可以将其输出到gl_FragColor.
  • 计算片段着色器中的颜色混合。如果您将着色器中的端点颜色作为制服传递,您可以根据混合因子使用您可以在 GLSL 中执行的任何数学运算(包括诸如Photoshop 混合模式之类的东西)将它们组合起来。
于 2013-11-13T01:39:03.437 回答