我需要一个随机数生成器来创建一些图形静态。我不是在寻找噪声算法 - 我只是想要白噪声。我所需要的只是 glsl 中的随机数生成器。具体来说,随着时间的推移,我将使用它为每个片段创建随机亮度偏移。
要求:
- 生成 0.0 到 1.0 之间的数字(不关心是否包含/不包含)
- 这不必是that随机的。这不会用于任何安全目的,它只需要肉眼看来是“随机的”。
- 它需要可以计算lowp只漂浮! (适用于移动设备)
- 仅具有fragment_x、fragment_y 和time_mod_ten_pi 作为输入(time_mod_ten_pi 正是它听起来的样子;自游戏开始以来的时间(以秒为单位),mod (10*3.1415) 作为浮点数传入,以允许轻松、连续的振荡而无需担心关于精度问题。30 秒对于人类不会注意到重复的噪音来说已经足够了)
- 当显示在fragment_x *fragment_y网格上时,我不需要任何可见的图案(静态或运动)
- 越简单/越快越好!
想在这里重申一下——只需要使用 lowp 浮点数即可运行。互联网上流传的那句话 (fract(sin(dot(...)))) 确实not满足这个条件! (至少,我认为问题在于低浮点数......也可能是真正微弱的罪恶实施......所以如果你也可以避免高数字的罪恶?奖金?)
这是我能想到的最好的,但我仍然不是 100% 满意(如果你仔细观察,你仍然可以看到一个小的万花筒般的效果......
float rand(float frag_x, float frag_y, float t)
{
float r = t*7.924;
return fract(sin(frag_y+frag_x)*r+sin(frag_y-frag_x)*r*.7);
}
(7.924 和 .7 是我在键盘上混搭的——仅此而已)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)