自从提出这个问题以来已经有一段时间了,但是我遇到了同样的问题并且在网上没有找到太多讨论,所以我想我会发布我的解决方案。
如果你必须使用 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);
};