我正在尝试修改TrackballControls.js,使其旋转类似于OrbitControls.js,其中地平线保持平坦,但保持在场景上旋转的能力(特别是collada建筑模型)。我一直试图在一天的大部分时间里弄清楚这一点,但我是一名设计师,而不是一名程序员。 :-)我甚至不确定我是否应该关注this.rotateCamera和/或this.update。
(顺便说一下,我只是使用OrbitControls.js,但它不支持平移,这在查看大型collada建筑模型时是必要的。)
非常感谢任何帮助。
答案 0 :(得分: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);
};