Three.js中的旋转锚点

4

我正在定义一个圆锥体,需要能够围绕其顶点(即圆锥体厚度最小的点)进行旋转。目前我还没有找到设置旋转发生的点的方法。

var coneGeometry = new THREE.CylinderGeometry(1000, 0, width, 50, 50, false);
var cone = new THREE.Mesh(coneGeometry, material);
cone.position.x = x;
cone.position.y = y + width / 2;
cone.position.z = z;
// I want this rotation to happen around the point given by the (x, y, z) location
cone.rotation.x = dip;
1个回答

13

圆锥几何图形的中心位于原点。您需要做的是,在创建圆锥几何图形后将其向右平移,以使圆锥的尖端位于原点。

coneGeometry.applyMatrix( new THREE.Matrix4().makeTranslation( 0, coneHeight/2, 0 ) );

翻译:当圆锥的小端为顶点时,翻译符号会发生改变。

现在,当你旋转圆锥时,它会围绕顶点旋转。而且顶点也将位于你设置的位置。

编辑:现在你可以这样做:

coneGeometry.translate( 0, coneHeight/2, 0 ); // three.js r.72

2
这对我不起作用。它将枢轴点与几何图形一起转换。 - Tyguy7
1
原来我使用的是旧版的ThreeJS,但我没有意识到这一点。 - Tyguy7
1
现在想要这样做的任何人,需要知道translate已被替换为translateOnAxis(),或者您可以使用translateX()、translateY()或translateZ()。我最终使用了conegeometry.translateY(-coneHeight/2)。 - Joe Jankowiak
1
@JoeJankowiak 不是这样的。不要混淆Object3D方法和Geometry方法。 - WestLangley
1
你是对的,我撤回我的声明。我想我尝试将翻译应用于对象而不是几何体,所以我得到了一个警告。 - Joe Jankowiak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接