我觉得这幅画最能解释我的问题:如何使用THREE.js在一个行星周围旋转一些卫星?
首先我翻译沿着红线框。接下来,我想旋转的效果是a
中的蓝色线条,但实际发生的情况更像b
中的蓝色线条。感觉像改变旋转总是相对于原始对象空间,但是平移(尽管首先发生)总是相对于父对象,并且不会真正影响与对象空间相关的几何点。我很抱歉,如果这是令人困惑的;显然我是这个新手。
产生这种效应的代码的重要部分如下。请记住,图像的方向不同于此代码生成的方向;图像仅仅是一个清楚地显示效果的例子。
var objectContainer = new THREE.Object3D();
var tubeRadius = 100;
var tubeGeometry = new THREE.CylinderGeometry(tubeRadius, tubeRadius, tubeRadius * 3, 36, 1, false);
var tube = new THREE.Mesh(tubeGeomtry, material);
scene.add(tube);
var boxes = new THREE.Object3D();
var boxEdge = 50;
var boxGeometry = new THREE.CubeGeometry(boxEdge, boxEdge, boxEdge);
var box1 = new THREE.Mesh(boxGeometry, material);
box1.translateX(tubeRadius + boxEdge/2 + 5);
box1.translateY(boxEdge/2);
box1.rotation = new THREE.Vector3(0, 2*Math.PI/3*0, 0);
boxes.add(box1);
var box2 = box1.clone();
box2.rotation = new THREE.Vector3(0, 2*Math.PI/3*1, 0);
boxes.add(box2);
var box3 = box1.clone();
box3.rotation = new THREE.Vector3(0, 2*Math.PI/3*2, 0);
boxes.add(box3);
scene.add(boxes);
我能想到的唯一的解决办法是包装每箱另一个对象的空间和围绕这一点,但它似乎是过度的工作。实现我要找的结果的首选方法是什么?
我不知道Three.js,但如何通过'Math.cos(rotation)* boxEdge/2,Math.sin(rotation)* boxEdge/2'以及本地旋转来翻译它呢? – Ryan 2013-03-05 02:13:18
这感觉就像双重工作,旋转和翻译每个盒子。真的,我想要做的是旋转每个克隆相同的点,这是翻译之前的原点。 – 2013-03-05 02:16:41