ThreeJS 测距功能

本文介绍了如何使用ThreeJS实现三维空间中的测距功能,包括选点绘线、绘制标签、动态绘制辅助线和撤销操作。通过Raycaster获取鼠标点击位置,用SphereGeometry绘制点,TextGeometry或CSS2DObject创建标签,动态更新线段和标签信息,以及使用CSS2DRenderer渲染2D标签,确保标签不被模型遮挡。同时,文章还详细阐述了绘制XYZ辅助线和撤销操作的实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  测距功能,也就是选择两点,计算它们的距离,实现效果大致如下:

在这里插入图片描述

  上图中主要涉及几个操作:

  • 点击鼠标左键选点,点击鼠标右键停止选点,若选择点数超过两点,则两点绘制一条线段,两点中心添加一个距离标签
  • 动态绘制点和线段
  • 动态绘制距离标签
  • 确定两点后添加 xyz 辅助线
  • 按下 ESC 键撤销上一步操作

选点绘线

  首先,我们需要通过鼠标在三维空间中选点,但是我们的屏幕是二维的,还有一维不知道,因此没办法直接凭空选点,因此目前的选点都是基于某个物体来的,即在物体上选点。

  那么要如何获取鼠标点击的位置呢,首先需要知道标准设备坐标转空间坐标,然后使用 Raycaster 根据这个点从相机位置发出一条射线,并检测与这条射线相交的物体,即可获得鼠标点击的位置:

const mouse = new THREE.Vector2();

// 标准设备坐标转空间坐标
mouse.x = (e.clientX / width) * 2 - 1;
mouse.y = -(e.clientY / height) * 2 + 1;

let raycaster = new THREE.Raycaster();
raycaster.setFromCamera(mouse, camera);

let intersects = raycaster.intersectObjects(scene.children);
if(intersects.length > 0) {
   
   
    return intersects[0].point;	// point 即点击坐标
}

  选了点后,需要在该点位置绘制一个圆点表示,这边使用了SphereGeometry 来绘制圆点:

createPoint = (pos, config={
   
   color:0x009bea, size:0.3}) => {
   
   
    let mat = new THREE.MeshBasicMaterial({
   
   color: config.color || 0x009bea});
    let sphereGeometry = new THREE.SphereGeometry(config.size || 0.3, 32, 32);
    let sphere = new THREE.Mesh(sphereGeometry, mat);
    sphere.position.set(pos.x, pos.y, pos.z);
    return sphere;
};

  两点之间绘制一条线段:

createLine = (p1, p2, config={
   
   color:0x009bea}) => {
   
   
    let lineGeometry = new THREE.Geometry()
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值