我将以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实例不在原点。
此外,在这种情况下,将多维数据集集中在原点上可能是一种更简单的解决方案......但多维数据集只是一个示例。
谢谢!
答案 0 :(得分:1)
您需要查看轮播和翻译的矩阵操作:THREE.Matrix4().makeRotation
和THREE.Matrix4().makeTranslation
[http://threejs.org/docs/#Reference/Math/Matrix4]
以下是cube-Rubik:http://jsfiddle.net/bvg83kku/
的相似性的简单示例