每个面具有K个顶点的三维点的三角剖分

Swi*_*isx 5 javascript geometry shape triangulation three.js

我正在使用Three.js.我有一组3D点(x,y,z)和一组面孔.一张脸由K点组成.它可以像凹面一样凸出.我在Three.js文档中找不到任何可以帮助我的东西.一种解决方案可能是对这些形状进行三角测量,但到目前为止我还没有找到任何简单的三角三角测量算法.

另一种解决方案是做类似的事情:

var pointsGeometry = new THREE.Geometry();

pointsGeometry.vertices.push(new THREE.Vector3(10, 0, 0));
pointsGeometry.vertices.push(new THREE.Vector3(10, 10, 0));
pointsGeometry.vertices.push(new THREE.Vector3(0, 10, 0));
pointsGeometry.vertices.push(new THREE.Vector3(1, 3, 0));
pointsGeometry.vertices.push(new THREE.Vector3(-1, 3, 0));
pointsGeometry.vertices.push(new THREE.Vector3(10, 0, 0));

var material = new THREE.MeshBasicMaterial({color: 0x00ff00});

var mesh = new THREE.Shape/ShapeGeometry/Something(pointsGeometry, material);
group.add(mesh);

scene.add(group);
Run Code Online (Sandbox Code Playgroud)

我有很多这些形状一起构成一个封闭的表面.

有什么建议吗?

感谢您的关注.祝你今天愉快.

nee*_*eeh 4

正如您所指出的,有两种方法可以实现这一目标:

  • 使用 3D 三角测量算法(Three.js 未提供);
  • 使用通常用于 Three.js 对象的 2D 三角测量算法Shape,并在几何体的每个面上应用一些变换。

最后一个看起来很酷,但不幸的是,当我尝试时,我意识到它并不是那么微不足道。我想出了与 Paul-Jan 类似的观点:

对于几何体的每个面:

  1. 计算面的质心;
  2. 计算面部法线;
  3. 计算人脸矩阵;
  4. 将 3D 点投影到面部的 2D 平面上;
  5. 创建几何图形(使用三角Shape测量算法进行三角测量);
  6. 将面矩阵应用于新创建的几何体
  7. 创建 aMesh并将其添加到 an Object3D(我尝试将所有几何图形合并为 1,但失败并显示ShapeBufferGeometry

检查一下这个小提琴

请注意顶点的缠绕顺序THREE.Material.side或放置THREE.DoubleSide以防止面被剔除。