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

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

以上是关于如何为每个片段保存一个变量值以重用它? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

matlab 如何保留变量值

如何为 dojox.mobile 视图编写可重用的控制器代码

从活动中更改片段的变量值

iOS xcode重用tableview [关闭]

如何为光线投射生成相机光线

保存变量值并在页面刷新后检索它[重复]