如何更改Object3D与其子级之间的转换?

时间:2015-09-27 03:05:35

标签: graphics 3d three.js

我将以Rubik的立方体为例来说明我的问题。假设我已经决定将我的3x3x3立方体数组放在中心(x = 1,y = 1,z = 1),而不是原点。现在,我想围绕平行于x轴的轴旋转一个立方体面,x轴穿过我的中心(1,1,1)。

我的问题是,如何使用包含要旋转的面中的多维数据集的单个父Object3D对象来执行此操作?

我可以通过使用另一个Object3D-祖父母来实现所需的结果。

//translate the parent object so that the face is centered at (0,0,0)
parent.position.y = -1;
parent.position.z = -1;

// translate the grandparent object so the face center is back at (1,1,1)
grandparent.position.y = 1;
grandparent.position.z = 1;

然后在渲染循环中..

grandparent.rotation.x += .01;

我认为我可以通过在向其添加face-cubes之前翻译父级来实现它,但事实是Object3D实例使用从世界原点到他们孩子的翻译作为他们的初始翻译,即使Object3D实例不在原点。

此外,在这种情况下,将多维数据集集中在原点上可能是一种更简单的解决方案......但多维数据集只是一个示例。

谢谢!

1 个答案:

答案 0 :(得分:1)

您需要查看轮播和翻译的矩阵操作:THREE.Matrix4().makeRotationTHREE.Matrix4().makeTranslation

[http://threejs.org/docs/#Reference/Math/Matrix4]

以下是cube-Rubik:http://jsfiddle.net/bvg83kku/

的相似性的简单示例