没有滚动的three.js轨迹球控制

时间:2012-10-11 11:19:13

标签: three.js

是否有人知道是否/如何修改轨迹球控件以保持地平线水平但仍然允许您围绕对象旋转?

通过将axis.x和axis.z设置为0,它会停止滚动,但也会停止在对象上旋转的能力。

轨道控制接近我正在寻找但无法平移的能力。

任何帮助?

3 个答案:

答案 0 :(得分:4)

自问这个问题以来已经有一段时间了,但我遇到了同样的问题,并没有在网上找到太多的讨论,所以我想我会发布我的解决方案。

如果你必须使用TrackballControls并想要平坦的视野,你可以通过在' this.rotateCamera'的末尾添加以下行来编辑TrackballControls.js库。方法

this.object.up = new THREE.Vector3(0,1,0); 这将摄像机向上锁定在(0,1,0)方向(即y方向)。然后,整个修改过的方法函数将显示为:

this.rotateCamera = function () {

var angle = Math.acos( _rotateStart.dot( _rotateEnd ) / _rotateStart.length() / _rotateEnd.length() );

if ( angle ) {

    var axis = ( new THREE.Vector3() ).crossVectors( _rotateStart, _rotateEnd ).normalize();
        quaternion = new THREE.Quaternion();

    angle *= _this.rotateSpeed;

    quaternion.setFromAxisAngle( axis, -angle );

    _eye.applyQuaternion( quaternion );
    _this.object.up.applyQuaternion( quaternion );

    _rotateEnd.applyQuaternion( quaternion );

    if ( _this.staticMoving ) {

        _rotateStart.copy( _rotateEnd );

    } else {

        quaternion.setFromAxisAngle( axis, angle * ( _this.dynamicDampingFactor - 1.0 ) );
        _rotateStart.applyQuaternion( quaternion );

    }

}

// Lock the camera up direction
this.object.up = new THREE.Vector3(0,1,0);

};

答案 1 :(得分:0)

这对我来说似乎很有用,仍然在研究它背后的数学。 [编辑]我首先使用camera.lookAt(someObj),然后使用此。

camera.rotation.z = Math.sin(camera.rotation.y)/3.5

答案 2 :(得分:0)

要建立在WestLangley comment上并在OrbitControls上启用screenSpacePanning,可以为您提供与TrackballControls等效的功能,而无需滚动。

onClickListener()