Es ist eine Weile her, seit diese Frage gestellt wurde, aber ich lief in das gleiche Problem und viel Diskussion nicht online finden, so dass ich dachte, dass ich meine Lösung veröffentlichen würde.
Wenn Sie TrackballControls verwenden müssen, und Sie wollen einen flachen Horizont, können Sie einfach die TrackballControls.js Bibliothek bearbeiten, indem Sie die folgende Zeile am Ende des Verfahrens ‚this.rotateCamera‘ Zugabe
this.object. oben = neu DREI.Vektor3 (0,1,0); Dies sperrt die Aufwärtsrichtung der Kamera in der Richtung (0,1,0) (d. H. In der y-Richtung). Die gesamte modifizierte Methodenfunktion würde dann lauten:
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' unterstützt jetzt das Schwenken in three.js r.58. – WestLangley
Ich denke, dass WestLangleys Kommentar in eine Antwort umgewandelt werden sollte, damit er das Kopfgeld bekommen kann - es scheint die Frage zu beantworten, OrbitControls hat, soweit ich das beurteilen kann, alle Funktionen eines Trackballs, außer dass es keinen Wurf gibt der Horizont wird eben bleiben. –
Ich stimme dem zu, obwohl ich nicht weiß, wie ich seinen Kommentar in eine Antwort umwandeln kann. – gimg1