有谁知道是否/如何修改轨迹球控件以保持地平线水平,但仍允许您在对象周围和上方旋转?
通过将axis.x 和axis.z 设置为0,它会停止滚动,但也会停止在对象上旋转的能力。
轨道控制接近我正在寻找的,但没有平移的能力。
有什么帮助吗?
最佳答案
自从问这个问题已经有一段时间了,但我遇到了同样的问题并且在网上没有找到太多讨论,所以我想我会发布我的解决方案。
如果您必须使用 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);
};
关于三.js轨迹球控制无滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12838308/