我正在使用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);
我有很多这些形状一起构成一个封闭的表面。
有什么建议吗?
感谢您的关注。祝你今天愉快。
正如您所指出的,有两种方法可以实现这一目标:
Shape
对象的2D三角剖分算法,并在几何体的每个面上应用一些变换。最后一个似乎很酷,但不幸的是,当我尝试时,我意识到这不是那么微不足道。我想出了类似Paul-Jan所说的话:
对于几何体的每个面:
Shape
三角剖分算法进行三角化);Mesh
并将其添加到Object3D
(我试图将所有几何图形合并为1,但它与ShapeBufferGeometry
失败)检查this fiddle。
小心你的顶点的winding order或将THREE.Material.side
放到THREE.DoubleSide
以防止面部被剔除。