【问题标题】:(Cube) Rotation with three.js(立方体)用three.js旋转
【发布时间】:2013-07-17 15:11:07
【问题描述】:

我正在做三个.js 的项目,我有一个立方体,可以用一些按钮(箭头)旋转它。旋转有效,但经过一些旋转后,它不再朝正确的方向旋转。可能是因为立方体的轴被移动了?但这让我有点困惑..

我需要立方体能够通过一些控件向上、向下、向左和向右旋转。这基本上是它目前的工作方式:

当按下一个方向时,比如“右”,我们用 tween.js 更新 mesh.rotation.y,直到 mesh.rotation.y 旋转 90 度角。

//SCENE, MESH,.. SETUP
...

function rotateRight(){
   var start = {x:cubeMesh.rotation.x, y:cubeMesh.rotation.y, z:cubeMesh.rotation.z};
   //RIGHT: y + 90°
   var end = {x:cubeMesh.rotation.x, y:cubeMesh.rotation.y + degreeToRadians(90),
              z:cubeMesh.rotation.z};

   var tween = new TWEEN.Tween(start)
      .to(end, 1000)
      .easing( TWEEN.Easing.Exponential.InOut )
      .onUpdate(function(){
         cubeMesh.rotation.x = this.x;
         cubeMesh.rotation.y = this.y;
         cubeMesh.rotation.z = this.z;
       })
   .start();
}

function animateScene(){
    requestAnimationFrame(animateScene);
    TWEEN.update();
    renderer.render(scene, camera);
}

我需要改变什么来保持这个立方体在正确的方向旋转?我们可以固定立方体的轴,这样它们就不会移动了吗?我已经阅读了有关世界轴与对象轴的内容,这是我需要更改的内容吗?如何实现?

提前致谢!

【问题讨论】:

标签: javascript 3d three.js


【解决方案1】:

抱歉,无法发表评论,这肯定不是完美的答案,但如果您在旋转时遇到问题,也许您的补间不太正确? 令我印象深刻的是,您的功能仅在 1 个轴上进行旋转,而您仍然更新所有三个轴。也许你应该离开 x 和 z 而只更新正确的轴?也许这对你的问题也有帮助,因为你知道你实际上在改变什么。不过,这只是一个想法。

【讨论】:

  • 这只是我使用的方法的一个例子。在项目中我还需要x轴上下旋转。但是如果我先向左然后向上,那么下一个左右旋转就不再正确了,因为显然物体的轴随着旋转而移动,然后我也不得不弄乱 z 轴。我只是想知道我是否可以围绕一些不动的固定轴旋转立方体。
【解决方案2】:

想通了,感谢这篇文章: How to rotate a 3D object on axis three.js?

围绕世界轴转动对象。

【讨论】:

  • 您能发布您的解决方案吗?我想做和你描述的一样的事情,只要我不使用补间,我就可以围绕世界轴旋转。但是,尝试为旋转设置动画时,我得到了不需要的结果,因为在动画开始时立方体“重置”了旋转,从而导致错误的最终结果。谢谢。
猜你喜欢
  • 2017-02-21
  • 2017-01-19
  • 2021-01-08
  • 2014-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-29
相关资源
最近更新 更多