天天看點

用 three.js 繪制三維帶箭頭線 (線内箭頭)

在LineMaterial.js基礎上修改的ArrowLineMaterial.js代碼:

用 three.js 繪制三維帶箭頭線 (線内箭頭)
用 three.js 繪制三維帶箭頭線 (線内箭頭)

View Code

ArrowLineMaterial.js中主要修改部分:

在頂點着色器中定義變量:

用 three.js 繪制三維帶箭頭線 (線内箭頭)
用 three.js 繪制三維帶箭頭線 (線内箭頭)

在頂點着色器中計算一下線的長度:

用 three.js 繪制三維帶箭頭線 (線内箭頭)
用 three.js 繪制三維帶箭頭線 (線内箭頭)

在片元着色器中定義變量:

用 three.js 繪制三維帶箭頭線 (線内箭頭)
用 three.js 繪制三維帶箭頭線 (線内箭頭)

在片元着色器中貼圖:

用 three.js 繪制三維帶箭頭線 (線内箭頭)
用 three.js 繪制三維帶箭頭線 (線内箭頭)

在片元着色器中注釋掉下面幾行,使線的顔色和canvas中設定的顔色一緻:

用 three.js 繪制三維帶箭頭線 (線内箭頭)
用 three.js 繪制三維帶箭頭線 (線内箭頭)

CanvasDraw.js代碼:

用 three.js 繪制三維帶箭頭線 (線内箭頭)
用 three.js 繪制三維帶箭頭線 (線内箭頭)

DrawPath2.js代碼:

用 three.js 繪制三維帶箭頭線 (線内箭頭)
用 three.js 繪制三維帶箭頭線 (線内箭頭)

效果圖:

用 three.js 繪制三維帶箭頭線 (線内箭頭)

缺陷:

2.5D視角觀察,看着還行,但是把相機拉近觀察,箭頭就會變形。湊合着用。

箭頭貼圖變形或者箭頭顯示不全,原因我猜可能是因為在場景中,線的遠離相機的一端,在标準裝置坐标系中比較細,線的靠近相機的一端,在标準裝置坐标系中比較粗,但為了使線的粗細一樣,靠近相機的一端被裁剪了,是以箭頭可能會顯示不全。

不管是MeshLine還是three.js的Line2,這個帶寬度的線,和三維場景中的三維模型是有差別的,無論場景拉近還是拉遠,線的寬度不變,而三維模型場景拉遠變小,拉近變大。

Drawing arrow lines is hard!

用 three.js 繪制三維帶箭頭線 (線内箭頭)

參考文章:

https://www.cnblogs.com/dojo-lzz/p/9219290.html

https://blog.csdn.net/Amesteur/article/details/95964526

繼續閱讀