2012-10-05 96 views

答えて

15

私は、あなたが意味することは、そのオブジェクト内の特定の点を回転させたいということです。です。

たとえば、cylinderGeometryは、の中心を中心に回転します。 エンドの周りを回転させたいとします。

シリンダージオメトリを作成した直後に変換して、ジオメトリ内の希望するポイントが原点に来るようにするだけです。

geometry.applyMatrix(new THREE.Matrix4().makeTranslation(0, cylinderHeight/2, 0)); 

EDIT:あなたは今の代わりに、これを行うことができます。

geometry.translate(0, cylinderHeight/2, 0); // three.js r.72 

を今、あなたはシリンダーを回転させたときに、それは今ではなく、その真ん中よりも、その先端を中心に回転します。

回転している端も、円筒メッシュに設定した位置に配置されます。

もちろん、シリンダーだけでなく、どのようなジオメトリでも実行できます。 WestLangleyの上記の回答のためのコード例を与えることを

+0

ありがとう、それは動作します。しかし、チューブ形状の場合、軸のヘルパーをチューブの端に置くか、つまり各セグメントポイントで軸ヘルパーを使用して、ユーザーがチューブを回転または回転できるようにしますか? [link](http://stackoverflow.com/questions/12776933/three-js-rotate-tube-geometry-from-segment-point-and-show-different-values)の私の別の質問を見てください - @WestLangley – Valay

+0

このようにチューブジオメトリを回転させるのに役立ちますか?私は、チューブジオメトリーの特定の部分を回転させたい。回転すると、チューブ全体が回転します。 – Valay

+0

あなたは新しい投稿をする必要があります。 – WestLangley

5

// CYLINDER 
var cyl_material = new THREE.MeshBasicMaterial({ color: 0xff0000 }); 
var cyl_width = 1; 
var cyl_height = 5; 
// THREE.CylinderGeometry(bottomRadius, topRadius, height, segmentsRadius, segmentsHeight, openEnded) 
var cylGeometry = new THREE.CylinderGeometry(cyl_width, cyl_width, cyl_height, 20, 1, false); 
// translate the cylinder geometry so that the desired point within the geometry is now at the origin 
cylGeometry.applyMatrix(new THREE.Matrix4().makeTranslation(0, cyl_height/2, 0)); 
var cylinder = new THREE.Mesh(cylGeometry, cyl_material); 

scene.add(cylinder);  

今回転がシリンダ原点を回避します:

cylinder.rotation.x = 0.5*Math.PI; 

お役に立てば幸いです。

+0

ありがとうございます - あなたは私を助けてくれました! – bernhardrusch

関連する問題