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

问题描述 投票:1回答:2

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

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

我怎样才能做到这一点?

opengl glsl
2个回答
0
投票

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

vec3 alwaysConsistent = noise3(gl_FragCoord.xy)

有关更多信息,请参阅GLSL documentation on noise

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


0
投票

正确的方法是使用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

© www.soinside.com 2019 - 2024. All rights reserved.