Three.js 如何在轨迹球控件(r87)中使用鼠标左键进行透视相机平移?

Three.js 如何在轨迹球控件(r87)中使用鼠标左键进行透视相机平移?,three.js,Three.js,默认情况下,相机平移使用鼠标右键 Control.panSpeed = 1.5; 但我希望它在鼠标左键下工作。如何设置?这需要对轨迹球代码进行简单的修改 如果您查看TrackballControls.js,最开始的部分将详细介绍keycode相关状态机(): 这与进一步向下()的keydown()函数相关: 所以,我还没有机会测试这一点,但您应该能够将第11行中的PAN从2(右键单击的键码)更改为0(左键单击)或您想要的任何其他键码。记住也要更改ROTATE,以避免同时旋转和平移的错误倾向指

默认情况下,相机平移使用鼠标右键

 Control.panSpeed = 1.5;

但我希望它在鼠标左键下工作。如何设置?

这需要对轨迹球代码进行简单的修改

如果您查看TrackballControls.js,最开始的部分将详细介绍keycode相关状态机():

这与进一步向下()的
keydown()函数相关:

所以,我还没有机会测试这一点,但您应该能够将第11行中的PAN从2(右键单击的键码)更改为0(左键单击)或您想要的任何其他键码。记住也要更改ROTATE,以避免同时旋转和平移的错误倾向指令



编辑:根据@TheJim01的有用更正,实际的点击事件触发实际上发生在脚本第393行的
函数mousedown(event)
中。event.button对应于状态机中的相应编号。很抱歉造成混淆。

我相信您指的是
鼠标向下
事件,而不是
按键向下
。将操作状态设置为当前鼠标按钮(
\u state=event.button;
)后,会出现相关逻辑。@AquaVitae非常感谢您。它成功了。但我真的想要左键单击的平移和旋转键代码。无论如何都有可能吗?不幸的是,我不知道有什么简单的方法可以做到这一点,除非将这两个状态都设置为0会自动得到想要的结果。您可能需要深入挖掘并复制+粘贴/调整所需的自定义行为@绝对正确,我坚持纠正。拉比,谢谢你的提醒。
THREE.TrackballControls = function ( object, domElement ) {

    var _this = this;
    var STATE = {NONE: -1, ROTATE: 0, ZOOM: 1, PN: 2, TOUCH_ROTATE: 3, TOUCH_ZOOM_PANE: 4};

    this.object = object;
    this.domElement = ( domElement !== undefined ) ? domElement : document;

    // API

    this.enabled = true;
    this.screen  = { left: 0, top: 0, width: 0, height: 0 };
function keydown( event ) {

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

    window.removeEventListener( 'keydown', keydown );

    _prevState = _state;

    if ( _state !== STATE.NONE ) {

        return;

    } else if ( event.keyCode === _this.keys[ STATE.ROTATE ] && ! _this.noRotate ){

        _state = STATE.ROTATE;

    } else if ( event.keyCode === _this.keys[ STATE.ROTATE ] && ! _this.noZoom ){

        _state = STATE.ZOOM;

    } else if ( event.keyCode === _this.keys[ STATE.ROTATE ] && ! _this.noPan ){

        _state = STATE.PAN;

    }