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

斯威克斯

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

另一个解决方案是做这样的事情:

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);

我有很多这样的形状,它们构成一个封闭的表面。

有什么建议吗?

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

eh

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

  • 使用3D三角剖分算法(Three.js不提供);
  • 使用通常用于Three.jsShape对象的2D三角剖分算法,并对几何图形的每个面进行一些转换。

最后一个看起来很酷,但不幸的是,当我尝试了一下时,我意识到它并不那么琐碎。我想出了类似保罗·简所说的话:

对于几何图形的每个面:

  1. 计算质心的脸;
  2. 计算脸正常;
  3. 计算脸部矩阵;
  4. 将3D点投影到人脸的2D平面上;
  5. 创建几何体(使用Shape三角剖分算法进行三角剖分);
  6. 将面矩阵应用于新创建的几何
  7. 创建一个Mesh并将其添加到中Object3D(我尝试将所有几何合并为1,但失败了ShapeBufferGeometry

检查这个小提琴

小心的缠绕顺序的顶点或将THREE.Material.sideTHREE.DoubleSide防止脸部被淘汰。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章