Three.js实战--修改OrbitControls的按键

Three.js实战--修改OrbitControls的按键


在Three场景中我们经常会用到OrbitControls的控制方式,但这种控制方式下,鼠标左键为旋转视角,鼠标中键为拉伸视角,鼠标右键为平移视角(如图-1)。


( 图-1  OrbitControls默认控制方式 )


如果这种按键排布不符合自己的想法时则需要修改OrbitControls.js的源码来达到自己想要的效果。

比如,我们希望鼠标左键为平移视角,鼠标中键为旋转视角,鼠标右键为拉伸视角(如图-2)



找到onMouseDown函数

	function onMouseDown( event ) {

		if ( scope.enabled === false ) return;

		event.preventDefault();

		switch ( event.button ) {

			case scope.mouseButtons.ORBIT:

				if ( scope.enableRotate === false ) return;

				handleMouseDownRotate( event );

				state = STATE.ROTATE;

				break;

			case scope.mouseButtons.ZOOM:

				if ( scope.enableZoom === false ) return;

				handleMouseDownDolly( event );

				state = STATE.DOLLY;

				break;

			case scope.mouseButtons.PAN:

				if ( scope.enablePan === false ) return;

				handleMouseDownPan( event );

				state = STATE.PAN;

				break;

		}

		if ( state !== STATE.NONE ) {

			document.addEventListener( 'mousemove', onMouseMove, false );
			document.addEventListener( 'mouseup', onMouseUp, false );

			scope.dispatchEvent( startEvent );

		}

	}


标红的三行分别为旋转(handleMouseDownRotate)、拉伸(handleMouseDownDolly)、平移(handleMouseDownPan

修改这三行的顺序后再找到onMouseMove函数:

function onMouseMove( event ) {

		if ( scope.enabled === false ) return;

		event.preventDefault();

		switch ( state ) {

			case STATE.ROTATE:

				if ( scope.enableRotate === false ) return;

				handleMouseMoveRotate( event );

				break;

			case STATE.DOLLY:

				if ( scope.enableZoom === false ) return;

				handleMouseMoveDolly( event );

				break;

			case STATE.PAN:

				if ( scope.enablePan === false ) return;

				handleMouseMovePan( event );

				break;

		}

	}

修改方法同上,修改三者的次序,即可完成对OrbitControls的按键控制进行修改。

感谢阅读!


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值