前言
在《代碼本色》的第0章 引言 中,主要講到了隨機行爲和噪聲,以下爲第0章的內容目錄:
針對隨機行爲和噪聲,我進行了自己的習作。
關於習作
學習了《代碼本色》第0章的內容之後,關於習作,我想表現的元素就是:
- 隨機性
- 噪聲平滑
- 三維圖像
針對這三個我想要表現的元素,可以使用Perlin Noise去實現。
noise()函數傳入三個參數,在柏林噪聲隨機序列中,就可以產生三維的柏林噪聲,使用立方體陣以通過顏色和體積對不同空間點的強度進行可視化。這樣就實現了隨機性、噪聲平滑以及最後的三維可視化。
下面是效果圖和具體代碼實現:
void setup(){
size(800, 400, P3D);
background(100,100,100);
noStroke();
lights();
}
float t = 0;
void draw(){
++t;
clear();
for (int x = 0; x < width; x += 20){
for (int y = 0; y < height; y += 20){
for (int z = 40; z < 500; z += 20){
float n = noise(0.02*(x), 0.02*(y), 0.02*(z+t));
translate(x,y,-z);
fill(t*100,n*160);
box(n*25);
translate(-x,-y,z);
}
}
}
}
關於代碼
首先是在setup()函數裏面創建三維畫布,設置背景色等等。
設置一個變量 t ,這個變量用於使得圖像動態隨時間變化,這個變量在draw()函數中遞增。
在draw()函數裏面嵌套了三層for循環。
其中設置一個變量 n,用來接收返回的 noise()函數的值,這個隨機產生的噪聲值,用來控制box立方體的體積以及顏色。
這樣就滿足了隨機性,噪聲以及三維效果可視化等多方面的要求。