水波特效的實現

2021-04-25 13:51:08 字數 767 閱讀 3739

增加波源

俗話說:無風不起浪,為了形成水波,我們必須在水池中加入波源,你可以想象成向水中投入石頭,形成的波源的大小和能量與石頭的半徑和你扔石頭的力量都有關係。知道了這些,那麼好,我們只要修改波能資料緩衝區buf,讓它在石頭入水的地點來乙個負的「尖脈衝」,即讓buf[x,y]=-n。經過實驗,n的範圍在(32~128)之間比較合適。

控制波源半徑也好辦,你只要以石頭入水中心點為圓心,畫乙個以石頭半徑為半徑的圓,讓這個圓中所有的點都來這麼乙個負的「尖脈衝」就可以了(這裡也做了近似處理)。

增加波源的**如下:

好了,至此,水波特效的製作原理就此就全部揭示了。在上面的推導中,每一步都進行了很多看似非常過分的近似處理,但是,你完全不必擔心,事實證明,用這種方法,在速度和圖象上都可以獲得非常好的效果。源程式中有非常詳盡的注釋,仔細推敲一下,看懂它們應該不成問題。

這個程式是win32下的directx程式設計,沒有使用任何包裝庫。在我的電腦上(amdk6-200、2mvram、64msram),320x240 的畫面大小,每秒可以達到25幀。與前幾個程式不一樣,這個程式使用了視窗模式,所以除錯起來很方便。如果你對視窗模式程式設計不熟悉,這個程式也是乙個很好的例子。

這種用資料緩衝區對圖象進行水波處理的方法,有個最大的好處就是,程式運算和其示的速度與水波的複雜程度是沒有關係的,無論水面是風平浪靜還是波濤洶湧,程式的fps始終保持不變,這一點你研究一下程式就應該可以看出來。實際上,如果你掌握了這種方法,將這種方法推廣一下,完全可以做出另外一些特殊的效果,如煙霧、大氣、陽光等,我現在也正在研究這些特效的製作,相信不久以後就會有新的收穫。

水波紋特效新增

1 listview 自定義的mylistview gridview新增水波紋特效需在列表控制項中設定 android drawselectorontop true android listselector android selectableitembackground 2 recyclervie...

2D特效之水波

2d特效之水波 水波特效在遊戲當中也比較多見,波紋實時生成演算法很多,這裡介紹一種快速演算法。之所以說它是一種快速演算法,是因為它的計算既沒有用到sin cos函式也沒有用到sin cos函式的查表演算法,它只是根據波的傳播原理,通過少量的加減 位移運算來完成。如要多了解一些波的知識,趕快去翻書哦,...

基於html5水波的載入特效

先來看效果 2,利用canvas生成得到。var aimgarr 要載入的。ltloading aimgarr function ltloading arr oc.width 500 oc.height 200 var cxt oc.getcontext 2d cxt.beginpath var x...