2014-02-26 54 views
3

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

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

我想如果我想写我自己的随机数发生器,我知道在哪里看,但我想看看这样的东西是否已经发明了。我也很感激在GLSL 120中的任何链接均匀分布的随机数发生器。

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

+1

如果其他人很好奇,GLSL 120中包含一些噪声功能,例如'noise1'和'noise2'。不过,我还没有机会验证它们是否正常发布。 –

+1

请参阅http://stackoverflow.com/a/3956538/2521214 – Spektre

回答

-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.); 
    } 
} 

然后换 “时间” 到 “3·时间” 或“POW(时间,3) “检查它是否继续运行没有任何差异

+0

我测试过了,它确实似乎没有高斯分布。它似乎是经典GLSL兰特单线的一维版本。 – Ian