この写真は私の問題を最もよく説明していると思います:
まず、赤い線に沿ってボックスを翻訳します。次に、回転の効果をの青い線にしたいのですが、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 );
私が考えることができる唯一の解決策は、各ボックスを別のオブジェクトスペースでラップし、それを中心に回転させることですが、それは過度の作業のようです。私が探している結果を達成するための好ましい方法は何ですか?