如何在此glsl着色器中为纹理的每次迭代添加不同的颜色叠加?

时间:2017-03-29 19:55:07

标签: opengl glsl shader

所以我现在正在使用这个着色器,目标是拥有一系列基于相机的瓷砖,每个瓷砖都覆盖不同的颜色(想想Andy Warhol)。我已经让瓷砖工作了(侧面问题 - 两端的瓷砖当前被切断了~50%)但是我想为每次迭代添加一个滤色镜。我正在寻找最简洁的方法。有任何想法吗?

frag shader:

Sun Oct 30 00:00:00 CEST 2016, diff: 0
Sun Oct 30 01:00:00 CEST 2016, diff: 0
Sun Oct 30 02:00:00 CEST 2016, diff: 0
Sun Oct 30 02:00:00 CET 2016, diff: -3600000
Sun Oct 30 03:00:00 CET 2016, diff: 0
Sun Oct 30 04:00:00 CET 2016, diff: 0

1 个答案:

答案 0 :(得分:0)

让我们说你的纹理正在应用于四边形而你的顶点是:

float quad[] = {
    0.0, 0.0,
    1.0, 0.0,
    1.0, 0.0, // First triangle
    1.0, 0.0,
    1.0, 0.0,
    1.0, 1.0  // Second triangle
};

您可以指定与每个顶点对应的纹理坐标,并描述顶点数组对象中的关系。

现在,如果你将顶点数量增加四倍,你就可以访问四边形范围之间的中间点(创建四个子四边形),你可以关联(0,0) - > (1,1)纹理坐标与这些子标记中的每一个。效果是在每个子季度中渲染完整纹理。

然后,您可以在顶点着色器中对顶点进行数学运算,以计算要分配给每个子标记的颜色分量。颜色组件将传递给片段着色器。使用制服指定行数和列数,然后根据您计算当前顶点所在的单元格定义颜色分量。

您也可以尝试计算片段着色器中的所有内容,但我认为它可能会很快变得昂贵。只是预感。

您也可以尝试GL_REPEAT纹理参数,但您对结果的控制较少:https://open.gl/textures