實(shí)例代碼出處:flowfield - OpenProcessing 但是,寫(xiě)的有點(diǎn)啰嗦,我做了精簡(jiǎn),加了注釋 原理: 每一個(gè)流動(dòng)的粒子,含有一下屬性 loc 位置 dir 方向 vel 速率 在實(shí)時(shí)的計(jì)算中,每一幀每一個(gè)粒子都進(jìn)行以下運(yùn)算 void move() {//perlin噪聲的三個(gè)參數(shù),分別是xy坐標(biāo)和當(dāng)前幀總數(shù)(也可以理解為時(shí)間)//這樣時(shí)空之間變建立起轉(zhuǎn)換規(guī)則,轉(zhuǎn)換為弧度 float angle=noise(loc.x/500, loc.y/500, frameCount/500);//方向的x,y坐標(biāo)分別用時(shí)空轉(zhuǎn)換來(lái)的弧度計(jì)算余弦和正弦 dir.x = cos(angle); dir.y = sin(angle);//方向用作速率(其實(shí)就是速度了,因?yàn)檫@里有方向) vel = dir.get();//每一個(gè)粒子每一幀都乘以speed這個(gè)變量放大一下,算是簡(jiǎn)單的加速度 vel.mult(speed);//位置加上速度進(jìn)行更新 loc.add(vel);} 歡迎付費(fèi)咨詢 插個(gè)廣告 做人要酷,這個(gè)夏天你要不要學(xué)一點(diǎn)C++順便做點(diǎn)藝術(shù)作品? 2017年夏算法藝術(shù)實(shí)驗(yàn)室Processing基礎(chǔ)入門(mén)線上課程 修改過(guò)后添加注釋的代碼: //粒子數(shù)int num = 1000;//存放粒子的數(shù)組Particle[] particles = new Particle[num];void setup() { size(1024, 728); noStroke();//迭代生成所有粒子 for (int i=0; i |
|
來(lái)自: g_memory > 《交互技術(shù)》