嗨,我正在尝试用 threejs 绘制一个模型。
我尝试用线条绘制它,从而正确表示BIM模型。
使用网格绘制它会导致模型变形
我用网格绘制它的方法是
let vertices = [];
for (let part of this.BUILDINGINFORMATION) {
for (let point of part.Polyhedron.Points) {
vertices.push(point);
}
}
let holes = [];
let triangles, mesh;
this.GEOMETRY= new THREE.Geometry();
this.GEOMETRY.vertices = vertices;
triangles = new THREE.ShapeUtils.triangulateShape(vertices, holes);
for (let i = 0; i < triangles.length; i++) {
this.GEOMETRY.faces.push(new THREE.Face3(triangles[i][0], triangles[i][1], triangles[i][2]));
}
let material = new THREE.MeshBasicMaterial();
let mesh = new THREE.Mesh(this.GEOMETRY, material);
作为免责声明,我一般对threeJS或JS没有任何经验。
首先,您不应该将所有部分的所有顶点合并到一个顶点数组中。 为每个部分,甚至每个多面体制作单独的数组。
话虽如此,从文档中可以看出,ShapeUtils.triangulateShape仅适用于2D点集合。如果我正确地解释你的第一张图片,你的点实际上是3D的。 https://threejs.org/docs/#api/extras/ShapeUtils.triangulateShape
每个面具有 K 个顶点的 3D 点三角测量 此线程可能会为您提供一些有关如何将每张脸简化为 2D 的想法。
但是,您是否尝试过将点直接作为面推送,为每个零件创建网格?