Three.js线宽.lineWidth无效

Three.js线宽.lineWidth无效

在编写Three.js程序的时候,你设置线模型Line对应线材质LineBasicMaterial的线宽属性.lineWidth,可能是无效果。

个人技术博客

.lineWidth属性

关于线材质LineBasicMaterial和虚线材质LineDashedMaterial的线宽属性.lineWidth的介绍可以查看Three.js文档。

.lineWidth属性的主要功能是控制线条粗细,默认值是1。

一般在windows操作系统平台上使用Three.js引擎的WebGL渲染器WebGLRenderer进行渲染的时候,.lineWidth属性值设置为多少都是无效的,也就是说无论如何设置,线模型线宽都显示为1。

// 基础线材质
var mat = new THREE.LineBasicMaterial({
  color: 0xee1111,
  // 设置无效,线宽显示为1
  linewidth: 6,
});
//线条模型对象
var line = new THREE.Line(geo, mat);

解决方案

整体思路就是使用带状网格模型Mesh表示线条模型Line。

参考Three.js官方库案例three.js-master/examples/webgl_lines_fat.html

参考github MeshLine:https://github.com/quzheqing/Three.js

webgl_lines_fat.html案例

引入相关文件,注意LineGeometry.js依赖LineSegmentsGeometry.js,Line2.js依赖LineSegments2.js。

<script src='/js/lines/LineSegmentsGeometry.js'></script>
<script src='/js/lines/LineGeometry.js'></script>
<script src='/js/lines/LineMaterial.js'></script>
<script src='/js/lines/LineSegments2.js'></script>
<script src='/js/lines/Line2.js'></script>

写一个案例,引入顶点坐标,绘制一个字母M效果,如果用曲线返回足够多的顶点也可以绘制一个光滑的曲线

阅读/examples/js/lines目录下的文件,可以看出来Line2的基类是LineSegments2LineSegments2的基类是MeshLine2LineSegments2本质上都是一个网格模型,你可以把代码中THREE.Line2替换为THREE.Mesh,显示效果是一样的。

var geometry = new THREE.LineGeometry();
// 顶点坐标构成的数组pointArr
var pointArr = [-100,0,0,
                -100,100,0,
                0,0,0,
                100,100,0,
                100,0,0,]
// 几何体传入顶点坐标
geometry.setPositions( pointArr);
// 自定义的材质
var material  = new THREE.LineMaterial( {
  color: 0xdd2222,
  // 线宽度
  linewidth: 5,
} );
// 把渲染窗口尺寸分辨率传值给材质LineMaterial的resolution属性
// resolution属性值会在着色器代码中参与计算
material.resolution.set(window.innerWidth,window.innerHeight);
var line = new THREE.Line2(geometry, material);

每个顶点对应一个颜色,颜色会进行插值计算。

var colorArr = [
1,0,0,
0,1,0,
0,0,1,
0,1,0,
1,0,0,
]
// 设定每个顶点对应的颜色值
geometry.setColors( colorArr );

var material  = new THREE.LineMaterial( {
  // color: 0xfd1232,
  linewidth: 5,
  // 注释color设置,启用顶点颜色渲染
  vertexColors: THREE.VertexColors,
} );
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Threejs可视化

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值