three.js 轨道控制器(OrbitControls)相关原理及坐标转换

最近接触了three.js的轨道控制器OrbitControls,利用轨道控制器可以实现相机围绕目标进行轨道运动(本质就是改变相机的位置),但其具体过程是什么样的呢?经过查阅资料,现总结如下:

首先,在three.js中我们可以通过 this.camera.position.set() 设置相机的位置;

如果我们想360°观察几何体,我们需要借助轨道控制器OrbitControls,在初始化轨道控制器时,我们可以通过this.controls.target()设置控制器的target(焦点);

当点击鼠标左键,相机围绕目标y轴旋转,其运动轨迹所构成的其实就是一个球而target(焦点)则是其球心,焦点到相机自身的距离则为球的半径,获取其相机到焦点的距离(半径)可以通过this.controls.getDistance()获取。

那如何通过鼠标左键拖动,获取相机旋转的角度呢?代码如下:

if (this.camera && this.controls) {
    // 鼠标左键拖动时,相机围绕目标点y轴旋转,相机旋转的角度就是该点在xoz平面上的投影点相较于原点旋转的角度
    const dirx = camera.position.x - controls.target.x
    const dirz = camera.position.z - controls.target.z
    // 弧度转角度
    // 原点到一个点的线段逆时针旋转的弧度值就是Math.atan2()的返回值
    const theta = Math.atan2(dirx, dirz) * 180 / Math.PI;
  }

 参考资料:

THREEJS OrbitControls核心功能解读 - 知乎

4. OrbitControls辅助设置相机参数 | Three.js中文网

Three.js 进阶之旅:全景漫游-高阶版在线看房 🏡 - 掘金

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值