如何为每个片段保存一个变量值以重用它? [关闭]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何为每个片段保存一个变量值以重用它? [关闭]相关的知识,希望对你有一定的参考价值。
对不起这个菜鸟问题,但我被困在这里。我开发了我的第一个着色器。片段着色器计算我要重用的vec3变量“N2”而不是重新计算(因为它的值取决于随机函数)。
所以更清楚一点:我想在我的片段着色器中第一次计算N2并将其存储到下一次使用中。
我怎样才能做到这一点?
您可能对noise
GLSL函数系列感兴趣。它们接受一个输入参数并返回由该参数唯一确定的pseuo-random数字/向量(因此传递相同的值将使相同的数字相同)。像这样的东西:
vec3 alwaysConsistent = noise3(gl_FragCoord.xy)
有关更多信息,请参阅GLSL documentation on noise
。
但请注意,很长一段时间以来,大多数供应商并未实际实现这些功能,我不知道目前的情况如何。如果您发现它们不可用,您可以随时推出自己的确定性噪音。谷歌可以找到许多GLSL噪音功能,包括一些directly here on Stack Overflow。
正确的方法是使用2个不同的着色器和2个渲染过程: 1)将每片段随机值渲染到纹理中 2)使用该纹理(通过采样器[1]访问它)来读取第一遍中生成的随机值
为了将值渲染到纹理中,请查看framebuffer对象[2]
[1] OpenGL Wiki,采样器,https://www.khronos.org/opengl/wiki/Sampler_(GLSL) [2] OpenGL Wiki,framebuffer对象,https://www.khronos.org/opengl/wiki/Framebuffer_Object
以上是关于如何为每个片段保存一个变量值以重用它? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章