2014-02-26 88 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