天天看点

用 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

继续阅读