前两天遇到一个问题,使用 THREE.Line 画出来的线通过属性调整宽度无效

首先简单介绍一下 THREE.Line 这个类;

这个是在场景中画出线所使用的类,构造函数由2个参数组成:THREE.LineBasicMaterial(材质)、THREE.Geometry(几何体)

简单的说,材质主要控制线的颜色,宽度等;几何体主要控制线段断点的位置等;

line的使用方式:

let geometry = new THREE.Geometry();
geometry.vertices.push(PointsA,PointsB);let material = new THREE.LineBasicMaterial({linewidth: 2,//此处不起效果color: 'red'
});let line = new THREE.Line(geometry, material);
SCENE.add(line2);

所以宽度的问题出在材质上,经过网上一番查找,发现很多人也遇到了相同的问题,给出的解决方案是使用 Line2,

line2的使用方式:

let geometry2 = new THREE.LineGeometry();
var pointArr = [this.model.start.x,this.model.start.y,this.model.start.z,this.model.end.x,this.model.end.y,this.model.end.z]
geometry2.setPositions(pointArr);let material2 = new THREE.LineMaterial({linewidth: 2,color: 'red'
});
material2.resolution.set(window.innerWidth+100,window.innerHeight+100);//这句如果不加宽度仍然无效
let line2 = new THREE.Line2(geometry2, material2);
SCENE.add(line2);

然而事情并没有就此结束……

换用Line2以后又出现了新的问题:原来使用Line的时候,鼠标在很接近线的时候就可以换成手型,但是换成Line2以后必须鼠标在线上时候才能变为手型;

这个问题让我又去看了three里面选中物体的原理。这里简单给大家介绍一下:

three里面有个相机的概念,因为本身我的场景是空间直角坐标系,所以选取物体就有相机镜头向量鼠标悬停位置,在这2个点之间有条射线,又通过相机属性中的远近2个参数来调节这个问题,最终反映到映射物体的几何体上有个threshold属性来操作这个问题,我们姑且称之为“阔”。现在的问题就变成了如何才能让阔生效。

几经波折,最终在THREE.LineSegments2中找到了问题所在:

var isInside = ssOrigin3.distanceTo( closestPoint ) < lineWidth * 0.5;

上面这行代码中最后返回的值是决定是否判定为悬置状态,其中的ssOrigin3是鼠标位置,closestPoint是几何体到鼠标位置的最近距离的点,ssOrigin3.distanceTo( closestPoint )是两点之间的距离,lineWidth是线的宽度。综上所述,鼠标必定在线宽上才可以展示位悬停状态。

因此,最终的解决方案为,引出THREE.LineSegments2.raycast方法,重置这个0.5,让threshold属性加入运算即可解决。

文中资料引用自:

http://www.webgl3d.cn/threejs/docs/#api/zh/objects/Line

作者:sunnysnow0527 出处:https://mp.csdn.net/console/article 欢迎转载,也请保留这段声明。谢谢!

THREE.js开荒小记(二):无效宽度linewidth的Line 和 无效阔threshold的Line2相关推荐

  1. H5案例分享:jquery.qrcode.js生成简易二维码

    近期做项目需要生成二维码,并且解码获取信息,jquery.qrcode.js生成二维码比较的方便,写个教程分享给大家.欢迎大家测试留言,我会改进代码. 现在二维码越来越流行啦,支付扫二维码,关注扫二维 ...

  2. jquery二维码生成插件jquery.qrcode.js在线生成二维码

    一代巨匠金庸先生驾鹤西去,谢谢您的作品,陪我度过儿时的时光 –2018.10.31 一.场景再现 由于业务需求,经常会将访问链接分享给别人,方便其他客户访问我们的业务.在本周的需求中,我们需要根据地址 ...

  3. 使用js+html生产二维码

    使用js生产二维码 如何使用js+html生产二维码 1.网页源码 <!DOCTYPE html> <html><head><meta charset=&qu ...

  4. 微信小程序图表插件wxcharts.js使用小记,Echarts.js,推荐uCharts.js

    一.wxcharts.js 参考地址:https://github.com/xiaolin3303/wx-charts/issues/58 参数含义参考:https://www.cnblogs.com ...

  5. three.js 弹出二维图片

    three.js 弹出二维图片 代码 // 创建平面let geometry = new THREE.PlaneGeometry(30, 30);let plan_texture = THREE.Im ...

  6. 利用jquery的qrcode.js插件生成二维码的两种方式的使用

    2019独角兽企业重金招聘Python工程师标准>>> 利用jquery的qrcode.js插件生成二维码的额两种方式,canvas(即画布)方式和table方式(原文地址http: ...

  7. 编辑器js获取浏览器高度和宽度值(转)

    js获取浏览器高度和宽度值 网页可见区域宽: document.body.clientWidth 网页可见区域高: document.body.clientHeight 网页可见区域宽: docume ...

  8. (五)JS基础知识二(通过图理解原型和原型链)【三座大山之一,必考!!!】

    JS基础知识二(原型和原型链) 提问 class 继承 类型判断(instanceof) 原型 原型关系 基于原型的执行规则 原型链 说明 提问 如何准确判断一个变量是不是数组 class的原型本质 ...

  9. gnuplot绘图程序中对线型(linetype)、点型(pointtype)、线条宽度(linewidth)、点大小(pointsize)、图样

    作者:magj77 原作网址:http://blog.sina.com.cn/s/blog_6a5f098201013tvb.html 在NS2的gnuplot绘图程序中对线型(linetype).点 ...

  10. Python学习 Day28 JS函数(二)

    JS函数(二) (一)return关键字 关键字return一般结合函数一起使用.而且需要注意,这个关键字一般只能在函数体中使用 作用: 1.函数体中如果遇见关键字return,函数体后面语句不再执行 ...

最新文章

  1. python读什么英文-Python编程但英语差,能用中文吗?
  2. batchnorm2d参数 torch_Pytorch-nn.BatchNorm2d()
  3. tp 查询3天内是否有记录_DNF:玩家哭诉没坐过飞机,被吧主实锤打脸,TP制裁强行背锅...
  4. 主从同步设置的重要参数log_slave_updates
  5. c++静态成员变量使用前必须初始化,那么下面这个例子为什么不用初始化?
  6. build.gradle里repositories的mavenCentral实现原理解析
  7. [iOS] tableView中实现底部button出现时tableView的bottom自动向上偏移
  8. _VARIANT_T 到 CSTRING 转换
  9. fjblog佛教博客不错
  10. 用vim写go代码——vim-go插件
  11. logstash 吞吐量优化_logstash吞吐率优化
  12. Ubuntu1804安装ROS(melodic版本)
  13. 基于PC的机器视觉系统设计
  14. 缺失值处理,你真的会了吗?
  15. ABAP ALV(LVC)下拉框或者F4搜索帮助
  16. Java基础--面向对象(上)
  17. Linux网络之DHCP
  18. Temple Run的终点
  19. ffmpeg分离视频音频流!
  20. GEE行政区加载,高程坡度计算和裁剪

热门文章

  1. 怎么批量查询银行卡号发卡行等信息?
  2. Oracle19C下载安装教程(图文详解)
  3. javawebJAVAJSP酒店预订系统jsp酒店管理系统jsp民宿预订酒店jsp客房预订系统jsp宾馆客房预订系统
  4. 计算机网络电缆是什么,很多人不知道,计算机电缆和光缆有什么区别
  5. 计算机视觉论文-2021-04-01
  6. WORD打印时显示错误,未定义标签?
  7. 学校计算机教学楼命名大全,给学校楼起名字(给教学楼起名字与内涵)
  8. standard fifo和fwft fifo的区别
  9. python 模拟键盘按键错乱_python 采坑总结 调用键盘事件后导致键盘失灵的可能原因...
  10. office修复找不到msi_安装Office2007,总是提示找不到OfficeMUI.msi