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

如何在three.js中绘制线段并基于其生成裁剪平面?附测试示例

问题根源

你当前方案的核心错误是选的三个参考点共线:线段起点、终点、中点都在同一条直线上,数学层面三个共线点无法确定唯一平面,自然无法生成正确的裁剪平面。

正确实现方案

你的需求是基于朝向相机平面上绘制的线段生成裁剪平面,本质是要生成一个过线段、且垂直于当前视平面的平面,实现步骤如下:

  • 第一步:获取线段两个端点的世界坐标,记为pointA、pointB
  • 第二步:计算线段的单位方向向量
const lineDir = pointB.clone().sub(pointA).normalize()
  • 第三步:获取当前相机的世界坐标,计算视平面的单位法向量
const cameraWorldPos = new THREE.Vector3()
camera.getWorldPosition(cameraWorldPos)
const viewPlaneNormal = cameraWorldPos.clone().sub(pointA).normalize()
  • 第四步:通过叉乘计算裁剪平面的单位法向量
const clipNormal = lineDir.clone().cross(viewPlaneNormal).normalize()
// 若裁剪方向不符合预期,直接对法向量取反即可
// clipNormal.negate()
  • 第五步:实例化裁剪平面
// 第二个参数是平面常数,通过法向量和平面上任意点的点积取反得到
const clippingPlane = new THREE.Plane(clipNormal, -clipNormal.dot(pointA))
  • 第六步:开启裁剪功能生效
// 全局裁剪配置
renderer.clippingEnabled = true
renderer.clippingPlanes = [clippingPlane]

// 若只需对单个材质生效,配置对应材质即可
// material.clippingPlanes = [clippingPlane]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:06:00