[英]Random number in OpenGL GLSL fragment shader
我一直在看很多有關在片段着色器中生成隨機數的問題。 但是,它們都不是形狀:
float rand() {
...
return random_number;
}
它們都需要輸入參數。 有沒有辦法在沒有任何輸入的情況下獲得隨機數?
計算機是執行算法的確定性設備。 隨機性不能憑空表現出來。 盡管許多CPU確實具有某種形式的隨機性生成結構,但即使您看不到它,也需要某種輸入。
這就是為什么隨機數算法在技術上被稱為“偽隨機數”生成器(PRNG)的原因 。 他們接受輸入並基於該輸入生成輸出。 PRNG的訣竅在於它們生成的輸出(從理論上來說)是無法根據輸入預測的。 在基於硬件的隨機生成器之外, 所有計算機RNG都以這種方式工作。
即使C / C ++的rand
函數也可以,盡管它將輸入隱藏在srand
設置的種子狀態之后。 rand
使用可以由srand
初始化的內部狀態,並且該狀態用作PRNG函數的輸入。 每次執行rand
更改此狀態,大概是以一種不容易預測的方式。
從理論上講,您可以使用“ 圖像加載/存儲”功能來存儲內部狀態,從而在着色器中嘗試rand
技巧。 但是,這仍然可以作為輸入。 該函數可能不會接受輸入,但着色器當然會接受; 您必須提供紋理或緩沖區以用作內部狀態。
同樣,由於圖像加載/存儲讀取和寫入的不連貫性 ,它也不起作用。 多個調用將在同一狀態下讀取和寫入。 那不可能
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.