2017-02-20 133 views
1

我想沿着x轴旋转围绕原点0,0,0的场景中的所有对象。但是,设置obj.rotation.x + = 0.1;不沿原点旋转,而是沿着物体的中心旋转。我如何在原点周围实现物体的所需旋转?我觉得应该有一个简单的方法,但在官方文档或在线找不到任何内容。Three.js:全局旋转

回答

2

,而不是添加对象的场景,将其添加到THREE.Group()对象:

var group = new THREE.Group(); 
scene.add(group); 
... 
var mesh1 = new THREE.Mesh(...); 
group.add(mesh1); 
var mesh2 = new THREE.Mesh(...); 
group.add(mesh2); 
//and so on with meshes 

然后在渲染循环:

group.rotation.x += 0.1; 

Threejs.r84

+0

@ prisonder849我这样做,它的工作。感谢您的快速回复:)在接受它作为答案之前,我会等一会儿。 –

+0

@deusexmachina欢迎您) – prisoner849

1

你可以使用THREE.Object3D()
将所有网格物体添加到对象中myObject.add(myMesh)
然后使用myObject.rotateX(angle)
其中angle以弧度表示,myObject是Object3D对象,而myMesh是要添加的网格。
这将在本地空间中围绕x轴旋转对象。
更多信息可以在文档中找到:https://threejs.org/docs/#Reference/Core/Object3D

+0

尼斯和感谢快速回复:)有什么区别与由prisoner849分组提供的解决方案?这两种方法都与我相似。对于我来说,改变场景的结构似乎是矫枉过正,只是为了实现围绕原点的旋转。所以我正在寻找一个更简单的解决方案。仅仅从关注点分离的角度来看,我觉得在场景中重新组合对象是实现围绕原点旋转的必要条件。但不管怎么说,这两个解决方案似乎做工精细,十分感谢:) –

+1

@deusexmachina这里没有THREE.Group之间'如此大的差别()'和'THREE.Object3D()')[文件](https://threejs.org /docs/index.html#Reference/Objects/Group)说:_这与Object3D几乎相同。它的目的是使与对象组工作语法clearer._ – prisoner849

+1

@deusexmachina有这两者之间没有什么区别,只是名字。我一般喜欢使用'Object3D',因为我对这个名字感到满意(只是个人选择)。如果你想看到两者之间的差异,你可以前往:[Group.js code](https://github.com/mrdoob/three.js/blob/master/src/objects/Group.js)。它导入'Object3D'并将其类型更改为'Group'。 –