GLSL中的高斯分布式伪随机数发生器

时间:2014-02-26 23:37:46

标签: opengl random glsl

我需要在GLSL版本120片段着色器中生成正态分布的伪随机数。

他们甚至不必特别伪随机数。但它们确实需要正常分配。

我想如果我想编写自己的随机数生成器,我知道在哪里查看,但我想看看是否已经发明了这样的东西。我还要感谢GLSL 120中统一分布的随机数生成器的任何链接。

作为一个说明,我已经看到了GLSL的random noise generation问题。不幸的是,它看起来像单纯形和Perlin噪声有某种多模式分布。我想我可以使用mod函数,但我想知道是否有更合适的方法。

1 个答案:

答案 0 :(得分:-2)

试试这段代码:

highp float rand(float n){
    return fract(sin(mod(dot(n ,12.9898),3.14))*43758.5453);
}

你可以测试它:

highp float rand(float n){
    return fract(sin(mod(dot(n ,12.9898),3.14))*43758.5453);
}
void main(out vec4 fragColor, in vec2 p){
    p /= Resolution.xy;
    float e=rand(Time);
    if(p.x>e-0.01&&p.x<e+0.01){
        fragColor=vec4(1.,1.,1.,1.);
    }
}

然后将“Time”更改为“3. * Time”或“pow(Time,3。)”,检查它是否继续运行,没有任何差异