Three.js的DragControls和OrbitControls实现互斥

本文介绍如何在Three.js中实现DragControls和OrbitControls的互斥功能,通过在DragControls工作时禁用OrbitControls,解决两者同时作用导致的交互混乱问题。
摘要由CSDN通过智能技术生成

Three.js的DragControls和OrbitControls实现互斥

有这么一个问题,我们对一个场景加入了OrbitContrils,而且对一组物体加入了DragControls,当我们拖动物体的时候,场景也会同时被拖动,也就是OrbitContrils和DragControls同时生效了。这篇文章就是来解决这个问题的。
直接上代码。

    //拖拽控制器
    function initDragControl() {
    //这里是给dots这一个对象数组加入了一个拖拽控制器
        dragcontrols = new DragControls( [ ... dots ], camera, renderer.domElement );

	//这里加入了两个监听,‘drag’代表的是物体被拖拽时的状态,需要去执行myrender()
	//‘dragend’代表的是物体拖拽结束的状态,需要去执行后面的函数
        dragcontrols.addEventListener('drag',myrender );
        dragcontrols.addEventListener('dragend',(event)=>{
            renderer.render( scene, camera );
			//物体拖拽完毕,将轨迹控制器开启
            orbitcontrols.enabled = true;
        })
    }

    //轨迹控制器
    function initOrbitControl() {
        orbitcontrols = new OrbitControls(camera, renderer.domElement);
        orbitcontrols.enabled = true;
        camera.position.set( 0, 200, 2000 );
        orbitcontrols.enableDamping = true;
        //是否可以缩放
        orbitcontrols.enableZoom = true;
        //是否自动旋转
        orbitcontrols.autoRotate = false;
        //设置相机距离原点的最远距离
        orbitcontrols.minDistance = 1;
        //设置相机距离原点的最远距离
        orbitcontrols.maxDistance = 3000;

        orbitcontrols.update();
    }
function myrender(event) {
		//将轨迹控制器关闭
        orbitcontrols.enabled = false;
        //下面写你要进行的操作




    }

以上操作大概就是在DragControls生效的时候关闭了OrbitControls,然后DragControls完成的时候来打开OrbitControls。从而来达到互斥的效果

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值