three.js:群组相对于相机的Y轴旋转

时间:2019-02-05 12:32:19

标签: three.js rotation euler-angles

即使经过数小时的谷歌搜索,我仍然无法真正解决这个问题。也许这里有人可以帮我一点忙。

我基本上想确定对象的Y旋转(始终位于视口的中心),相对于我的相机。想象一下,一个物体站在电唱机/转盘的中心,它围绕其Y轴缓慢旋转,而我的相机在使用OrbitControls更改凸轮在该物体周围的位置时,始终面对着该物体的中心。假设照相机没有移动,但转盘旋转一圈等于此Y旋转在360° 之间。

例如,此Y旋转为:

  • 当凸轮的位置为[x=0, y=0, z=100][x=0, y=100, z=200]时(凸轮的y位置无关紧要,它始终向下/向上看到小组的中心),

  • 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 :(得分:0)

我不确定我是否会有所帮助,但是也许Object3D.getWorldQuaternionQuaternion.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);