如何为每个片段保存一个变量值以重用它?

时间:2017-12-16 13:09:27

标签: opengl glsl

对于noob问题我很抱歉,但我被困在这里。 我开发了我的第一个着色器。片段着色器计算我要重用的vec3变量“N2”而不是重新计算(因为它的值取决于随机函数)。

所以更清楚一点:我想在片段着色器中第一次计算N2并将其存储下次使用。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:0)

您可能对noise GLSL函数系列感兴趣。它们接受一个输入参数并返回由该参数唯一确定的pseuo-random数字/向量(因此传递相同的值将使相同的数字相同)。像这样:

vec3 alwaysConsistent = noise3(gl_FragCoord.xy)

有关详细信息,请参阅GLSL documentation on noise

然而,请注意,很长一段时间以来,大多数供应商并没有实际实现这些功能,我不知道目前的情况如何。如果您发现它们不可用,您可以随时推出自己的确定性噪音。 Google可以找到许多GLSL噪音函数,包括一些directly here on Stack Overflow

答案 1 :(得分:0)

这样做的正确方法是使用2个不同的着色器和2个渲染过程:
1)将每片段随机值渲染成纹理
2)使用该纹理(通过采样器[1]访问它)来读取第一遍中生成的随机值

为了将值渲染到纹理中,请查看framebuffer对象[2]

[1] OpenGL Wiki,采样器,https://www.khronos.org/opengl/wiki/Sampler_(GLSL)
[2] OpenGL Wiki,帧缓冲对象,https://www.khronos.org/opengl/wiki/Framebuffer_Object