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

如何在Three.js中对SVG挤出生成的模型的首尾两端进行裁切

解决方案

方案1:使用Three.js内置裁剪平面(最简便,仅渲染层面裁切)

该方案无需修改原始几何体,仅在渲染阶段生效,适合需要动态调整裁切位置的场景:

  • 首先开启渲染器的局部裁剪支持:
renderer.localClippingEnabled = true;
  • 定义两个与裁切端面平行的裁剪平面,根据你的斜面需求调整平面法线和偏移量即可:
// 示例为沿X轴方向斜切的两个裁剪平面,法线方向均指向模型保留区域
const startClipPlane = new THREE.Plane(new THREE.Vector3(-1, 0, 0.2), 10); // 首端裁切平面
const endClipPlane = new THREE.Plane(new THREE.Vector3(1, 0, -0.2), 10); // 尾端裁切平面
  • 将裁剪平面绑定到挤出模型的材质上,同时开启截面填充效果:
extrudeMesh.material.clippingPlanes = [startClipPlane, endClipPlane];
extrudeMesh.material.clipIntersection = false;
// 若需要裁切后的截面正常显示材质颜色,可设置双面渲染
extrudeMesh.material.side = THREE.DoubleSide;

如果需要裁切后保留实体几何体数据用于后续操作,可使用下方的CSG方案。

方案2:使用CSG布尔运算(实体裁切,直接修改几何体本身)

该方案会直接生成裁切后的完整几何体,适合需要导出模型、需要截面参与物理碰撞等场景,推荐使用three-bvh-csg库实现高效布尔运算:

  • 引入库后初始化CSG操作器:
import { SUBTRACTION, Brush, Evaluator } from 'three-bvh-csg';
const csgEvaluator = new Evaluator();
  • 创建两个尺寸足够覆盖首尾待裁切区域的立方体作为裁切工具,调整位置和角度匹配你需要的斜面效果:
// 首端裁切工具
const startCutTool = new THREE.Mesh(
  new THREE.BoxGeometry(20, 20, 20),
  new THREE.MeshBasicMaterial()
);
startCutTool.position.set(-15, 0, 0);
startCutTool.rotation.y = Math.PI / 10; // 调整角度匹配目标斜面

// 尾端裁切工具
const endCutTool = new THREE.Mesh(
  new THREE.BoxGeometry(20, 20, 20),
  new THREE.MeshBasicMaterial()
);
endCutTool.position.set(15, 0, 0);
endCutTool.rotation.y = -Math.PI / 10;
  • 执行两次差集运算得到最终裁切模型:
let resultBrush = new Brush(extrudeMesh.geometry, extrudeMesh.material);
// 裁切掉首端多余部分
resultBrush = csgEvaluator.evaluate(resultBrush, new Brush(startCutTool.geometry, startCutTool.material), SUBTRACTION);
// 裁切掉尾端多余部分
resultBrush = csgEvaluator.evaluate(resultBrush, new Brush(endCutTool.geometry, endCutTool.material), SUBTRACTION);

// 生成最终裁切后的网格对象
const clippedMesh = new THREE.Mesh(resultBrush.geometry, resultBrush.material);
scene.add(clippedMesh);
// 移除原始的未裁切挤出模型
scene.remove(extrudeMesh);

注意事项

  • 裁剪平面的参数可通过Plane类的setFromNormalAndCoplanarPoint方法快速设置,只要确定斜面上任意一个点和法线方向即可快速生成对应平面
  • 进行CSG运算前建议先确保挤出几何体是封闭的,避免运算出错
  • 如果裁切后截面出现闪烁,可适当调整材质的polygonOffset参数解决深度冲突问题

内容的提问来源于stack exchange,提问作者SergeCools

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:09:02