即使经过数小时的谷歌搜索,我仍然无法真正解决这个问题。也许这里有人可以帮我一点忙。
我基本上想确定对象的Y旋转(始终位于视口的中心),相对于我的相机。想象一下,一个物体站在电唱机/转盘的中心,它围绕其Y轴缓慢旋转,而我的相机在使用OrbitControls更改凸轮在该物体周围的位置时,始终面对着该物体的中心。假设照相机没有移动,但转盘旋转一圈等于此Y旋转在0°
和360°
之间。
例如,此Y旋转为:
0°
当凸轮的位置为[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]
。
有什么想法吗?非常感谢!
答案 0 :(得分:0)
我不确定我是否会有所帮助,但是也许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);