Three.js获得世界坐标 .getWorldPosition()

Three.js获得世界坐标.getWorldPosition()

使用Three.js的开发的时候,如果你想获得一个网格模型Mesh或者一个模型对象Group的世界坐标,可以通过该模型的.getWorldPosition()方法实现,该方法的具体介绍可以参考Threejs文档核心Core分类下的基类Object3D

通过网格模型Mesh的属性.position获得的是网格模型的本地坐标,你可以用下面代码去测试下,查看浏览器控制台的数据对比。如果执行.getWorldPosition()方法获得的坐标值,你可以发现网格模型x轴方向平移距离是100,也就是网格模型的本地坐标Mesh.position.x和网格模型父对象的本地坐标Group.position.x相加。如果网格模型有多个父对象,每个父对象的平移变换在网格模型上都会体现出来。

var mesh = new THREE.Mesh(geometry, material);
mesh.position.set(50, 0, 0)
var group = new THREE.Group();
group.add(mesh); //网格模型添加到组中
group.position.set(50, 0, 0)
scene.add(group); //组添加到场景中

//该语句默认在threejs渲染的过程中执行  如果想获得世界矩阵属性、世界位置属性等属性,需要手动更新
scene.updateMatrixWorld(true);
// 声明一个三维向量用来保存网格模型的世界坐标
var worldPosition = new THREE.Vector3();
// 获得世界坐标,执行getWorldPosition方法,提取网格模型的世界坐标结果保存到参数worldPosition中
mesh.getWorldPosition(worldPosition)
console.log('查看网格模型世界坐标',worldPosition);
console.log('查看网格模型本地坐标',mesh.position);

如果你对层级模型已有一定概念,对本地矩阵和世界矩阵有一定的概念,那么你很容易理解什么是世界矩阵,如果你对层级模型没有概念,不是理解世界坐标概念,可以学习本站发布的threejs视频教程第六章6.层级模型、树结构

注意获取一个模型的世界坐标之前,需要执行scene.updateMatrixWorld(true);更新模型的世界矩阵,如果不更新模型世界矩阵,通过.getWorldPosition()方法获得世界坐标和局部坐标是一样的,执行scene.updateMatrixWorld(true);可以把从根对象scene到网格模型Mesh中间所有网格模型Mesh父对象的变换体现出来。

本文转载地址:我的个人技术博客

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值