【发布时间】:2013-02-19 07:26:16
【问题描述】:
我认为这张照片最能说明我的问题:
首先我沿着红线平移方框。接下来,我希望旋转的效果是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以及本地旋转翻译它怎么样? -
感觉就像双重工作,旋转和翻译每个盒子。我真正想要做的是围绕同一点旋转每个克隆,这是平移之前的原点。
标签: three.js