自從問了這個問題已經有一段時間了,但我遇到了同樣的問題,沒有在網上找到太多討論,所以我想我會發布我的解決方案。
如果必須使用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);
};
作爲變通,你可以嘗試使用'OrbitControls'和滑動大樓右側以模擬移動照相機左側。否則,破解'OrbitControls'可能比破解'TrackballControls'更容易。 – WestLangley
我想知道是否將平移添加到軌道比向軌跡球添加水平旋轉更容易。我會看到我可以理解軌跡球如何平移並嘗試將其移入軌道。謝謝。 :-) – Andy
是的,我認爲,將平移添加到OrbitControls會更容易。像這樣:'camera.position.addSelf(delta); controls.center.addSelf(delta);' – WestLangley