THREEJS OrbitControls核心功能解读

本文详细解析了THREEJS中的OrbitControls控制器核心源码及实现原理,介绍了如何设置焦点、实现以焦点为中心的旋转和平移操作,以及缩放功能。

OrbitControls是THREEJS中最常用的一个控制器,可以帮助我们实现以目标为焦点的旋转缩放,同时平移相机观察场景的操作,看上去是物体在进行变换,实际上所有的变化都是相机的相对位置在发生改变。今天就给大家讲解该空间实现的核心源码以及实现原理。
ps:以下代码非完整代码段,仅为关键实现代码

如何设置焦点

  // 我们在创建控制器时,会将相机以及dom传入该控件,而相机的lookAt也正是控件的target

  // 在创建实例时会被重新定义为坐标轴原点(0,0,0),同时相机的lookAt也会被覆盖。

  this.object = object;

  this.target = new Vector3();

以焦点作为中心旋转

    // 获取相机位置
    var position = scope.object.position;

    // 用当前相机位置减去焦点位置,获得向量
    offset.copy( position ).sub( scope.target );

    // 通过获得的向量建立球坐标系
    spherical.setFromVector3( offset );

    // 对球坐标系做旋转,可以理解相机位置所对应的球上的点在运动
    spherical.theta += sphericalDelta.theta;
    spherical.phi += sphericalDelta.phi;

    // 控制球坐标系极坐标上下限,避免变换到phi的极点
    spherical.makeSafe();

    // 再将球坐标转换为向量
    offset.setFromSpherical( spherical );

    // 相机的位置也就是焦点位置加上球坐标的偏移量
    position.copy( scope.target ).add(
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值