three.js - 如何合并文本、球体和盒子几何?
问题描述
我正在尝试合并文本、球体和框几何体,这样我就可以只用一个设定位置来改变所有位置。条件是我必须使用 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);
解决方案
参考这个讨论文本几何中缺少的东西。需要添加 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);
推荐阅读
- python - 使用 OpenCV 捕获当前帧
- rest - CL_HTPP_CLIENT 代码 400 错误请求 - ABAP
- javascript - 如何使vue firebase调用异步
- schedule - 如何根据数据准确性评估我的软件输出?
- c - 编译 Win32 应用程序时对“StringCbPrintfW”的未定义引用
- json - 使用riverpod通过http从json获取数据的问题
- javascript - 我想比较对象的 JSON 数组中的内部数组并使用 JavaScript 根据条件返回新数组
- azure - Azure 服务总线 - 随机反序列化问题
- linux-kernel - [块层]如何在多队列中启用全局顺序重排序
- php - Laravel:模型的多语言细节