OpenGL GLSL片段着色器中的随机数

用户4911648

我一直在研究关于在片段着色器中生成随机数的很多问题。但是,它们都不是形状:

float rand() {
    ...
    return random_number;
}

所有这些都需要一个输入参数。有没有办法在没有任何输入的情况下获得随机数?

尼可波拉斯

计算机是执行算法的确定性设备。随机性不能凭空表现出来。虽然许多 CPU 确实具有某种形式的随机生成构造,但即使您没有看到它,也需要某种输入。

这就是随机数算法在技术上被称为“伪随机数”生成器 (PRNG) 的原因他们接受输入并根据该输入生成输出。PRNG 的诀窍在于它们生成的输出(理论上)无法从输入中预测。除了基于硬件的随机生成器之外,所有计算机 RNG 都以这种方式工作。

甚至 C/C++ 的rand函数也是如此,尽管它隐藏了由srand. rand使用可由 初始化的内部状态srand,并且该状态用作 PRNG 函数的输入。每次执行都会rand改变这个状态,大概是以一种不容易预测的方式。

理论上,您可以rand在着色器中尝试该技巧,通过使用图像加载/存储功能来存储内部状态。但是,这仍然可以作为输入。该函数可能不接受输入,但着色器肯定会;您必须提供纹理或缓冲区以用作内部状态。

此外,由于图像加载/存储读取和写入不连贯性质,它不起作用多次调用将读取和写入同一状态。那不可能发生。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

OpenGL 中的 Vulkan GLSL 着色器

OpenGL GLSL:如何使用片段着色器在photoshop中实现渐变贴图的概念?

片段着色器无法在OpenGL GLSL中创建像光一样的渐变

片段着色器中的OpenGL纹理为黑色

片段着色器引发的OpenGL错误

顶点着色器或片段着色器中的OpenGL ES2.0 Lighting

OpenGL:在着色器中定义变量

在OpenGL着色器中渲染纹理

何时在游戏中的OpenGL中使用GLSL着色器?

imageLoad glsl在计算着色器OpenGL 4.3中始终返回0

OpenGL GLSL在将clip()添加到片段着色器时,在标记“ <int-const>”处期望“ ::”

OpenGL片段着色器返回纹理的固定颜色

OpenGL:使用片段着色器绘制圆弧斜角?

OpenGL将颜色传递给片段着色器

在OpenGL中将矩阵类型用作片段着色器输出

opengl es 2.0-优化片段着色器

OpenGL片段着色器正在移动对象

openGL片段着色器和原始texel数据

OpenGL片段着色器无法照亮场景

OpenGL-使用片段着色器获得奇怪的结果

在片段着色器中的OpenGL中更改纹理的颜色效果不佳

如何在XCode中编写OpenGL ES片段着色器?

OpenGL-片段着色器中的tex坐标超出指定范围

顶点和片段着色器,用于OpenGL ES20中的照明效果

OpenGL中的Oren-Nayar照明(如何在片段着色器中计算视图方向)

如何在 OpenGL 片段着色器中渲染最近的顶点

如何将属性直接传递给OpenGL中的片段着色器?

将统一值设置到片段着色器 (OpenGL) 中

镶嵌着色器-OpenGL