three.js: 顺畅旋转与 OrbitControls 相反的对象 camera.rotation.y

three.js: Smoothly spin an object opposite to OrbitControls camera.rotation.y

使用 OrbitControls 旋转 three.js 中的场景,我希望 planeMesh 对象始终面向相机。我正在尝试以下操作,但它只是像疯了似的旋转(并且似乎是处理器密集型),但当我用鼠标环绕场景(移动相机)时,它看起来像是试图保持正面。我试图让它仅在相机移动时才缓慢地重新定位。我在这里做错了什么?

Here's a plunker

这是相关的 JS:

function animate() {
   requestAnimationFrame( animate );

   planeMesh.rotation.y -= Math.PI /camera.rotation.y;

   render();
}

我还尝试了以下方法(也没有用):

   function animate() {
     requestAnimationFrame( animate );
     var a = camera.rotation.y; 
     var b = camera.rotation.y; 

     if (a == b) {
       planeMesh.rotation.y -= Math.PI /camera.rotation.y;
       } else {    
     }

     render();
     a = camera.rotation.y; 
}

** 编辑 我希望 cameraplaneMesh 保持彼此当前的关系。 以下是开始轮换: planeMesh Rotation y = 3.141592653589793 camera Rotation y = -0.06894749489830237

不过,我认为camera使用的是THREE.Euler,而planeMesh使用的是Math.PI旋转,所以...这两个旋转测量使用不同的系统吗?

当然,如果我能得到起点的差异,然后仅当差异更大时才更改 planeMesh rotation.y,而且那个差异大于起始差异,那么我就完成了我的任务目标。但是我该怎么做呢?我是否必须以某种方式翻译这两个测量系统?当我旋转场景时,相机似乎确实使用了不同的测量比例。

确保飞机始终面向相机的最简单方法是简单地将其连接到相机而不是场景,例如camera.add(planeMesh); 并相对于相机定位平面。那么他们的旋转总是自然对齐的。

或者,如果两者都是同一父项(通常是场景)的子项,则使用 planeMesh.lookAt(camera.position);