Как вращаться с OrbitControls, без ограничений

Прямо сейчас я использую средства управления орбитой, и я могу поворачиваться только на 180 градусов в направлении вверх-вниз. В другом направлении я могу вращаться вечно, я думаю, что это направление z. В любом случае, как я могу сделать его полностью безграничным для всех направлений вращения?

вот мой код сейчас, я пробовал с бесконечностью и без нее:

this.scene_threeD = new THREE.Scene();
this.camera_threeD = new THREE.PerspectiveCamera( 75, width_threeD / height_threeD, 0.1, 1000 );
this.renderer_threeD = new THREE.WebGLRenderer({ canvas: threeDCanvas,
                               preserveDrawingBuffer: true,
                               antialias: true });
this.renderer_threeD.setSize( width_threeD, height_threeD);
controls = new THREE.OrbitControls(this.camera_threeD, this.renderer_threeD.domElement);
        controls.maxPolarAngle = Infinity;
        controls.minPolarAngle = -Infinity;
        controls.maxAzimuthAngle = Infinity;
        controls.minAzimuthAngle=-Infinity;
        controls.update();

1 ответ

Решение

Проблема с "орбитальной камерой" состоит в том, что (по определению) она всегда пытается держать камеру "вверх", направленной вверх. Это означает, что ориентация камеры не определена, когда вы смотрите прямо вверх или вниз. Вот почему в Three.js реализован метод makeSafe(), который сохраняет полярный угол в пределах +/- 90 градусов.

Если бы вы сняли это ограничение, вы, вероятно, увидели бы, что камера мгновенно меняет направление при прохождении угла 90 градусов (или хуже). Это обычно нежелательное поведение в приложении.

Подводя итог: если вы хотите безграничное вращение, вам не нужна орбитальная камера. Это не техническое, а концептуальное ограничение.

Другие вопросы по тегам