对于noob问题我很抱歉,但我被困在这里。 我开发了我的第一个着色器。片段着色器计算我要重用的vec3变量“N2”而不是重新计算(因为它的值取决于随机函数)。
所以更清楚一点:我想在片段着色器中第一次计算N2并将其存储下次使用。
我怎样才能做到这一点?
答案 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