You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

非原点网格边界线绘制问题: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 22:29:58