标签坐标问题—局部、世界坐标

本文介绍了在three.js中如何处理模型的世界坐标问题,特别是在多层级模型中,通过实例展示了如何通过`.position`和`.getWorldPosition()`方法获取网格模型的局部和世界坐标,以及父对象对其的影响。

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

郭隆邦老师threejs教程学习笔记

关于模型标签问题中模型世界坐标的获取问题,如果你想给一个网格模型Mesh添加一个标签,无论是通过精灵模型Sprite方式,还是平面网格模型方式,还是HTML元素方式。你首先要做到的就是先准确获得需要添加标签网格模型在threejs三维空间中的世界坐标。

层级模型

复杂的项目,一个three.js场景往往包含包含多个模型对象,模型对象也会有一些父对象,这样就会形成一个层级模型,从数据结构的角度来看就是树结构。 一个模型相对世界坐标系原点的位置是世界坐标,相对父对象的位置是局部坐标。

局部坐标.position

.position属性是一个模型的局部位置坐标或者说本地坐标,相对父对象的位置,如果一个网格模型Mesh直接属于场景Scene,没有除了Scene以外的父对象,.position表示的局部位置坐标就是世界坐标。

世界坐标.getWorldPosition()

实际项目中一个模型对象可以有多个父对象,这个时候想获得该模型对象的世界坐标,就不能通过.position属性,应该通过.getWorldPosition()方法实现,该方法的使用参考基类Object3D。

mesh.getWorldPosition(Vector3)读取一个模型的世界坐标,并把读取结果存储到参数Vector3中。

mesh.position.set(60, 0, 0);

const group = new THREE.Group();
group.add(mesh);
group.position.set(50, 0, 0);
scene.add(group);

// 声明一个三维向量用来表示某个坐标
const worldPosition = new THREE.Vector3();
// 获取mesh的世界坐标,你会发现mesh的世界坐标受到父对象group的.position影响
mesh.getWorldPosition(worldPosition);
console.log('世界坐标',worldPosition);   //_Vector3 {x: 110, y: 0, z: 0}
console.log('本地坐标',mesh.position);   //_Vector3 {x: 60, y: 0, z: 0}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值