当前位置: 首页 > news >正文

77. 样条曲线

对于一些不规则的曲线,很难用一个圆、椭圆或抛物线函数去描述,这时候,可以使用threejs提供的样条曲线贝塞尔曲线去表达。

下面就给大家演示下样条曲线的使用特点。

三维样条曲线CatmullRomCurve3

在三维空间中随意设置几个顶点坐标,然后作为三维样条曲线CatmullRomCurve3的参数,你就可以生成一条穿过这几个点的光滑曲线。

CatmullRomCurve3的参数是三维向量对象Vector3构成的数组。

// 三维向量Vector3创建一组顶点坐标
const arr = [new THREE.Vector3(-50, 20, 90),new THREE.Vector3(-10, 40, 40),new THREE.Vector3(0, 0, 0),new THREE.Vector3(60, -60, 0),new THREE.Vector3(70, 0, 80)
]
// 三维样条曲线
const curve = new THREE.CatmullRomCurve3(arr);

从曲线获取顶点坐标,绘制线条

从曲线获取一定量顶点数据,用于绘制线模型Line,一般来说获取顶点数量越多,渲染的曲线相对越光滑。

//曲线上获取点
const pointsArr = curve.getPoints(100); 
const geometry = new THREE.BufferGeometry();
//读取坐标数据赋值给几何体顶点
geometry.setFromPoints(pointsArr); 
// 线材质
const material = new THREE.LineBasicMaterial({color: 0x00fffff
});
// 线模型
const line = new THREE.Line(geometry, material);

点模型可视化曲线经过的点

点模型可视化曲线经过的点,验证样条曲线是否经过数数组arr表示的几个顶点坐标。

// 用点模型可视化样条曲线经过的顶点位置
const geometry2 = new THREE.BufferGeometry();
geometry2.setFromPoints(arr);
const material2 = new THREE.PointsMaterial({color: 0xff00ff,size: 10,
});
//点模型对象
const points = new THREE.Points(geometry2, material2);

2D样条曲线

CatmullRomCurve3是3D样条曲线API,曲线经过的点可以在3D空间中任何一个位置,二维样条曲线SplineCurve默认情况下就是在XOY平面生成一个平面的样条曲线。

SplineCurve的参数是二维向量对象Vector2构成的数组。

// 二维向量Vector2创建一组顶点坐标
const arr = [new THREE.Vector2(-100, 0),new THREE.Vector2(0, 30),new THREE.Vector2(100, 0),
];
// 二维样条曲线
const curve = new THREE.SplineCurve(arr);

http://www.mrgr.cn/news/49761.html

相关文章:

  • ChatGPT 中文版镜像网站整理合集(2024/10/14)
  • SpringBoot构建的健康管理推荐引擎
  • 【流计算】数据采集:web应用如何抗住大量tcp连接与高并发
  • 49 | 桥接模式:如何实现支持不同类型和渠道的消息推送系统?
  • 智谱AI视频通话API【GLM-4-Plus-VideoCall】开放申请
  • 基坑气膜:为清洁施工提供强力保障—轻空间
  • CentOS设置IP地址
  • Android 10.0 滑动解锁流程
  • 基础篇:带你打开Vue的大门(一)
  • #10234-D unresolved symbols remain 问题解决方法
  • 免费版视频压缩软件:让视频处理更便捷
  • 了解 Python 的 __repr__ 方法
  • DMN决策引擎入门知识点
  • Type-c取点诱骗方案
  • python画图|三维动态柱状图绘制
  • 低空经济概念如此火爆,跨行业入局如何成功?
  • docker搭建 Rancher开源的 Kubernetes管理平台
  • metabase域账号登录过期处理
  • Brave编译指南2024 Linux篇-更新与维护(八)
  • 企业内训|LLM大模型技术在金融领域的应用及实践-某商业银行分行IT团队