非原点网格边界线绘制问题:EdgesGeometry无法正确定位
解决Three.js EdgesGeometry仅在原点生效的问题
不需要修改几何体的顶点数据,EdgesGeometry是基于原始几何体的局部空间数据生成的,正确做法是让边缘线对象继承原网格的变换属性,而非修改几何体本身。
方法一:同步边缘线与原网格的变换属性
直接复制原网格的位置、旋转、缩放参数给边缘线对象:
// 基于原网格几何体生成边缘几何 const edges = new THREE.EdgesGeometry(mesh.geometry); // 创建边缘线渲染对象 const lines = new THREE.LineSegments( edges, new THREE.LineBasicMaterial({ color: "red" }) ); // 同步原网格的位置、旋转、缩放 lines.position.copy(mesh.position); lines.quaternion.copy(mesh.quaternion); lines.scale.copy(mesh.scale); scene.add(lines);
方法二:将边缘线设为原网格的子对象
把边缘线添加为原网格的子元素,这样原网格变换时,边缘线会自动继承父对象的所有变换:
const edges = new THREE.EdgesGeometry(mesh.geometry); const lines = new THREE.LineSegments( edges, new THREE.LineBasicMaterial({ color: "red" }) ); // 添加为原网格的子对象,自动跟随变换 mesh.add(lines);
原代码问题分析
你之前的代码存在两个核心问题:
- 重复变换:同时对几何体应用
quaternion和matrixWorld,导致顶点坐标被错误叠加变换 - 错误修改几何体:直接修改几何体顶点会破坏局部空间数据,且所有边缘线复用了错误变换后的几何体,最终导致轮廓线重叠
内容的提问来源于stack exchange,提问作者user26351712
相关产品推荐
相关产品推荐

