簡體   English   中英

OpenGL GLSL片段着色器中的隨機數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM