首页 > 解决方案 > 如何合并文本、球体和盒子几何?

问题描述

我正在尝试合并文本、球体和框几何体,这样我就可以只用一个设定位置来改变所有位置。条件是我必须使用 BufferGeometry。合并球体和框时一切正常,但合并文本几何时出错。

它说Uncaught (in promise) TypeError: Cannot read property 'x' of undefined at X.BufferGeometry.fromGeometry

let modelGeometry = new THREE.Geometry();
const globalMaterial = new THREE.MeshBasicMaterial({ color: 0xff0000 });
const head = new THREE.SphereGeometry(0.5, 32, 16);
const body = new THREE.SphereGeometry(0.5, 32, 16);
const textGeometry = new THREE.TextGeometry("text ID", {
  font: "monaco",
  size: 1,
  height: 0,
  curveSegments: 3,
});

textGeometry.computeBoundingBox();
textGeometry.mergeVertices();

const textMaterial = new THREE.MeshBasicMaterial({ color: 0xff0000 });

const workerId = new THREE.Mesh(textGeometry, textMaterial);

const headMesh = new THREE.Mesh(head, globalMaterial);
const bodyMesh = new THREE.Mesh(body, globalMaterial);
headMesh.matrix.setPosition(new THREE.Vector3(0, 0, 3));
bodyMesh.matrix.scale(new THREE.Vector3(1, 1, 4));
modelGeometry.merge(headMesh.geometry, headMesh.matrix);
modelGeometry.merge(bodyMesh.geometry, bodyMesh.matrix);
modelGeometry.merge(workerId.geometry, workerId.matrix);

const bufGeometry = new THREE.BufferGeometry().fromGeometry(modelGeometry);

this.human = new THREE.Mesh(bufGeometry, globalMaterial);
this.modelBuilder.addMesh(this.human);

标签: three.jsautodesk-forge

解决方案


参考这个讨论文本几何中缺少的东西。需要添加 computeVertexNormals();

modelGeometry.merge(headMesh.geometry, headMesh.matrix);
modelGeometry.merge(bodyMesh.geometry, bodyMesh.matrix);
modelGeometry.merge(humanIdMesh.geometry, humanIdMesh.matrix);
modelGeometry.computeVertexNormals();
const humanModel = new THREE.BufferGeometry().fromGeometry(modelGeometry);

推荐阅读