three.jsflowlinethree中
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
為渲染時間,型別為float
,lxs_color
線段顏色,型別為vec3
同時將修改後的顏色賦值給gl_fragcolor
,gl_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...