javascript - Three.js:平滑地旋转与 OrbitControlscamera.rotation.y 相反的对象

标签 javascript canvas 3d three.js

使用 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 保持当前的相互关系。 以下是起始轮换: 平面网格旋转 y = 3.141592653589793 相机旋转 y = -0.06894749489830237

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

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

最佳答案

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

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

关于javascript - Three.js:平滑地旋转与 OrbitControlscamera.rotation.y 相反的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32083164/

相关文章:

javascript - Twitter Bootstrap 选项卡 location.hash 更改问题

javascript - ng-repeat 内的 Angular 指令获取预编译值

javascript - canvas.toDataUrl() 返回 'data:,'

javascript - 在Javascript中通过ID获取元素的效率如何?

java - 实现 Blinn–Phong 着色模型时出现问题

c - 为什么在调用 glLoadIdentity() 后出现 1282 错误?

javascript - Ionic AngularJS 插值时出错

javascript - jQuery inArray() 不起作用?它没有找到我确定在数组中的字符串

javascript - 我如何使用带有原始数据而不是图像的 createImageBitmap 作为输入

math - 4x4 矩阵如何在 3d 图形中工作?