是否有人知道是否/如何修改轨迹球控件以保持地平线水平但仍然允许您围绕对象旋转?
通过将axis.x和axis.z设置为0,它会停止滚动,但也会停止在对象上旋转的能力。
轨道控制接近我正在寻找但无法平移的能力。
任何帮助?
答案 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()