私は、この絵は最高の私の問題を説明すると思う: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
これは、二重の作業のように感じ、各ボックスを回転して翻訳します。本当に私がしたいのは、翻訳前の起点である同じ点について各クローンを回転させることです。 –