ThreeJS繪製流動的虛線效果

2021-10-17 03:32:56 字數 2052 閱讀 2306

three.jsflowline

three中linematerial中支援將線渲染為虛線樣式,通過在linematerial中引入時間,可以使虛線動起來,產生流動效果。具體效果圖如下:

three中繪製線,是採用instance方式來繪製的,每個線段作為乙個instance進行繪製,每個instance通過著色器來生成虛線效果。

繪製linegeometry時,linematerial中可以通過指定dashed來將線樣式渲染為虛線。直接開啟linematerial.js檔案可以看到,fragmentshader中通過對vlinedistance + dashoffset取餘來劃分虛線段,即超過dashsize的畫素直接丟棄不進行渲染。

if ( mod( vlinedistance + dashoffset, dashsize + gapsize ) > dashsize )  discard; // todo - fix
通過修改vlinedistance + dashoffset部分,即對這一部分累加距離,同時累加的距離同時間相關即可實現dash部分的移動。

這裡我簡化直接將丟棄的部分設定為綠色,同時將vlinedistance + dashoffset修改為:

if ( mod( vlinedistance + dashoffset + elasptime, dashsize + gapsize ) > dashsize ) //discard; // todo - fix

其中elasptime為渲染時間,型別為floatlxs_color線段顏色,型別為vec3

同時將修改後的顏色賦值給gl_fragcolorgl_fragcolor = vec4( lxs_color, diffusecolor.a );

到此,著色器部分修改完成.

將linematerial.js中的uniformslib.line中補充屬性elasptime。同時在linematerial原型上新增屬性elasptime,即可,完成對linemateial的修改。

uniformslib.line =

, resolution:

, dashscale:

, dashsize:

, dashoffset:

, gapsize:

,// todo fix - maybe change to totalsize

opacity:

, elasptime:,}

;

elasptime:

,set

:function

(value)

}

這裡直接使用專案中自帶的webgl_lines_fat.html,來進行測試。將animate方法中新增itimes作為渲染時間,用來對應material中的elasptime,使用如下**傳入matline.elasptime=itimes/1000.;,開啟頁面,勾選dashed選項時,即可看到流動效果。

繪製虛線的UIView

繪製虛線的uiview cashapelayer配合貝塞爾曲線可以繪製曲線,筆者繼承了乙個uiview的子類,並將該子類的backedlayer替換為cashapelayer,以此來實現繪製虛線的效果.繪製出各種虛線的效果圖 實現的原始碼 linedashview.h 與 linedashview....

googleMap中虛線的繪製方法

在做專案中碰到要繪製 路徑,這種一般都是用虛線繪製。查了好久沒弄出來,後來在一同事的推薦發現了googlemap的乙個官方 有這種繪製demo,總結一下供大家借鑑 供上 function drawprepath array,color var linesymbol var pathcoord new...

openlayers vue繪製水流 流動的虛線

openlayers繪製流動的虛線和canvas繪製流動虛線原理類似,利用linedash屬性繪製一組線段和間距交替的虛線,然後利用偏移量,利用定時器迴圈,最後就可以實現水流效果 話不多說直接上 box map div div template import map from ol map impo...