ThreeJS克隆三角形然后单独旋转它们

时间:2017-09-11 16:44:59

标签: javascript 3d three.js

我有以下代码:https://pastebin.com/sxfmAAz9(使用pastebin,因为我不想分散OP,这是一个很长的序列)

基本上我正在创建一个平面并将其拆分为widthsegments和heightsegments以创建一个尖锐的平面。然后我在每个面上迭代,我试图复制那个面,这样我就可以让它上升并缓慢旋转,这样看起来它就是从飞机上出来的。我已经成功完成了这个,但是当我旋转三角形时,看起来它们被组合在一起,就像它们是同一个网格的一部分,即使我为每个面创建一个新网格。这是我创建三角形的方式:

return

我怎样才能基本上使从平面复制的单个三角形网格绕自己旋转?我不希望它们分组,我希望每个三角形都是个体的。现在所有的三角形都表现得好像它们是同一个网格的一部分,如果我正在旋转它们各自的几何体,它看起来好像我正在旋转它们所有位置的平面。

1 个答案:

答案 0 :(得分:0)

这是因为每个三角形的原点仍然是0, 0, 0。您正在围绕同一个轴点旋转所有三角形,给人的印象是它们都是连接的。您需要做的是在几何体上使用translate将其顶点放在原点周围,然后通过将网格的position更改回原始值将其返回到原始点:

例如,假装您想要围绕点[5, 3, 0]旋转一个三角形:

// First, translate geometry to origin
triangleGeometry.translate(-5, -3, 0);
var triangleMaterial = new THREE.MeshPhongMaterial({ color: 0xff0000, wireframe: showWireframe, specular: 0x0, morphTargets: true, flatShading: true, side: THREE.DoubleSide });
var triangle = new THREE.Mesh(triangleGeometry, triangleMaterial);
// Then move mesh back to its starting position
triangle.position.set(5, 3, 0);

你如何计算每个三角形的中心,我会留给你:)