three.js: Y-вращение группы относительно камеры - PullRequest
0 голосов
/ 05 февраля 2019

Даже после нескольких часов поиска в Google, я не могу разобраться с этим.Может быть, кто-то здесь может помочь мне немного с этим.

Я в основном хочу определить Y-вращение объекта (который всегда находится в центре области просмотра), относительномоя камера .Представьте себе объект, стоящий в центре проигрывателя / проигрывателя, который медленно вращается вокруг своей оси Y, и моя камера всегда обращена к центру этого объекта при использовании OrbitControls для изменения положения камеры вокруг объекта.Представьте, что камера не движется, но поворот поворотного стола, один оборот равен этому вращению Y, чтобы быть между и 360°.

Например, это вращение Y будет:

  • , когда положение кулачка равно [x=0, y=0, z=100] или [x=0, y=100, z=200] (положение у кулачка не имеет значения, оно всегда смотрит вниз / вверх доцентр группы),

  • 45°, когда положение кулачка [x=100, y=0, z=100] или [x=100, y=200, z=100],

  • 90° когда положение кулачка равно [x=100, y=0, z=0] или [x=200, y=100, z=0] и т. Д.

Дело в том, что оба они могут иметь некоторые довольно случайные положения и повороты вмировая система координат, поэтому не учитывается, что позиция объекта [x=0, y=0, z=0].

Есть идеи?Большое спасибо!

1 Ответ

0 голосов
/ 05 февраля 2019

Я не уверен, что помогу, но, возможно, Object3D.getWorldQuaternion и Quaternion.angleTo () может помочь?

что-то вроде:

const cameraQuaternion = new THREE.Quaternion();
camera.getWorldQuaternion(cameraQuaternion);

const targetQuaternion = new THREE.Quaternion();
target.getWorldQuaternion(targetQuaternion);

const delta = cameraQuaternion.angleTo(targetQuaternion);
const euler = new THREE.Euler().setFromQuaternion(delta);

console.log(euler.y / Math.PI * 180);
...