three.js 在它的中心围绕 Y 轴旋转 Object3d

Posted

技术标签:

【中文标题】three.js 在它的中心围绕 Y 轴旋转 Object3d【英文标题】:three.js rotate Object3d around Y axis at it center 【发布时间】:2013-07-28 06:06:42 【问题描述】:

我在Three.JS 中有一个Object3d,它是一组网格对象。 我想围绕 Y 轴旋转这个组,在它的中心,远离世界中心 (0,0,0)。 我只知道Group.rotate.y += deg 代码,但是对于每个轴方向,它总是围绕 (0,0,0) 旋转对象,而不是我的组中心! 我怎样才能解决这个问题?

更新:

阅读cmets

【问题讨论】:

【参考方案1】:

见How to rotate a 3D object on axis three.js?

我这样解决了这个问题:

我为 ThreeJS 创建了“ObjectControls”模块,它允许您旋转单个 OBJECT(或组),而不是 SCENE。

包含库:

用法:

var controls = new THREE.ObjectControls(camera, renderer.domElement, yourMesh);

您可以在这里找到现场演示:https://albertopiras.github.io/threeJS-object-controls/

这里是回购:https://github.com/albertopiras/threeJS-object-controls。

【讨论】:

【参考方案2】:

This answer 帮助了我,但代码不太正确。轴必须是单位向量,object.rotateOnAxis() 是增量的。

这是一个工作示例:

var axis = new THREE.Vector3(4, 0, 7).normalize();
var speed = 0.01;

// set up scene, etc.

function animate () 

    // other code

    if (object) 
        object.rotateOnAxis(axis, speed);
    

【讨论】:

【参考方案3】:

看看 Object3D 的rotateOnAxis(axis, angle) 函数。 它应该是这样的:

//declared once at the top of your code
var axis = new THREE.Vector3(0.5,0.5,0);//tilted a bit on x and y - feel free to plug your different axis here
//in your update/draw function
rad += radIncrement;
object.rotateOnAxis(axis,rad);

HTH

【讨论】:

谢谢老兄,但它仍然在 (0,0,0) 点旋转,轴方向!看到这个:threejs.org/examples/canvas_geometry_cube.html我想要这样的东西,但不使用相机旋转,加上我的对象远离(0,0,0) 您可能想重新表述您的问题:我以为您想在任意轴上旋转。再次阅读您的问题和您的评论后,听起来您想将多个对象作为一个组旋转到组的中心。您可以轻松地做到这一点,首先创建您的组并在设置时使用组的轮换:var group = new THREE.Object3D();group.add(object1);group.add(object2);object2.x = 100 在您的代码顶部,然后只需 group.rotation.y += radians 是的,你明白了我的目的,但如果你再次阅读我的问题,我说,我试过group.rotation.y += deg,但它不会围绕组中心旋转!它围绕 (0,0,0) 旋转 当然可以,这是默认行为。您有两个选择: 1. 创建一个翻译矩阵并将其应用于组。选项 2,这对您来说可能更容易,使用另一个组 (2) 来嵌套第一个 (1)...翻译 group1(包含您的对象的那个)并旋转包含 group1 的 group2。 当然!我向您热烈推荐this course。解释得很好,有练习,而且都使用了three.js。第 4 章:转换就是你所追求的

以上是关于three.js 在它的中心围绕 Y 轴旋转 Object3d的主要内容,如果未能解决你的问题,请参考以下文章

Three.js 飞机的 3D 旋转

Three.js - 围绕某个轴旋转球体

three.js 围绕 Y 轴的相机旋转似乎关闭

three.js:结合 tween.js 围绕世界轴旋转对象

如何围绕轴旋转 Three.js Vector3?

如何在three.js对象渲染中从中心向左更改轴(x,y,z)位置?