Three.js 三角剖分

发布于 2021-10-04 08:59:37 字数 2540 浏览 1606 评论 0

通过激光等扫描测量技术可以得到一系列的离散点,比如倾斜摄影测量测量地面得到的地面离散点位置数据,如果想把这些非结构的顶点数据,通过一定的算法策略得到可以渲染的三角形网格模型,需要通过 三角剖分 策略来实现。

三角剖分库 Earcut

Three.js 切割多边形算法的实现可以参考官方文档 EarcutEarcut 的源码可以查看目录 three.js\src\extras\Earcut.js.

github Earcut.js 使用

//0, 0, 100, 0, 100, 50, 0, 50表示平面上4个顶点的坐标
//返回结果trianglesIndex:[2, 3, 0, 0, 1, 2]
// 一个四边形可以剖分为2个三角形表示,返回结果trianglesIndex是顶点数据索引
var trianglesIndex = earcut([0, 0, 100, 0, 100, 50, 0, 50]);
console.log(`返回结果:三角形对应顶点索引`,trianglesIndex);
// 一个五边形的案例测试:一个五边形剖分为3个三角形
var trianglesIndex2 = earcut([0, 0, 100, 0, 150,25, 100, 50, 0, 50]);
console.log(`返回结果:三角形对应顶点索引`,trianglesIndex2);
// 三维坐标返回顶点索引  可以参照上面的五边形  返回结果是一样的
var trianglesIndex3 = earcut([
0, 0, 0, //顶点1坐标
100, 0, 0, //顶点2坐标
150, 25, 0, //顶点3坐标
100, 50, 0, //顶点4坐标
0, 50, 0, //顶点5坐标
],null,3);
console.log(`返回结果:三角形对应顶点索引`,trianglesIndex3);

通过 Threejs 测试显示 Earcut.js 剖分的结果

// 三维坐标返回顶点索引  可以参照上面的五边形  返回结果是一样的
var trianglesIndex3 = earcut([
  //三维顶点数据
  var arr = [
    0, 0, 0, //顶点1坐标
    100, 0, 0, //顶点2坐标
    150, 25, 0, //顶点3坐标
    100, 50, 0, //顶点4坐标
    0, 50, 0, //顶点5坐标
  ]
  var geometry = new THREE.BufferGeometry();
  //一个五边形多边形的顶点位置数据
  var vertices = new Float32Array(arr);
  // 创建属性缓冲区对象
  var attribue = new THREE.BufferAttribute(vertices, 3); //3个为一组
  // 设置几何体attributes属性的位置position属性
  geometry.attributes.position = attribue
  // 三角形顶点索引计算
  var trianglesIndex = earcut(arr,null,3);
  // Uint16Array类型数组创建顶点索引数据
  var indexes = new Uint16Array(trianglesIndex)
  // 索引数据赋值给几何体的index属性
  geometry.index = new THREE.BufferAttribute(indexes, 1); //1个为一组
  // 不执行computeVertexNormals,没有顶点法向量数据
  geometry.computeVertexNormals(); //不计算法线,表面比较暗,计算了比较亮,
  console.log(`查看几何体顶点数据`, geometry);
  //材质对象
  var material = new THREE.MeshLambertMaterial({
   color: 0x0000ff, //三角面颜色
   side: THREE.DoubleSide, //两面可见
   // 查看剖分的三角形效果
   wireframe:true,
  });
  var mesh = new THREE.Mesh(geometry, material); //网格模型对象Mesh
  scene.add(mesh); //网格模型添加到场景中

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

浮生未歇

暂无简介

0 文章
0 评论
18378 人气
更多

推荐作者

qq_Yqvrrd

文章 0 评论 0

2503248646

文章 0 评论 0

浮生未歇

文章 0 评论 0

养猫人

文章 0 评论 0

第七度阳光i

文章 0 评论 0

新雨望断虹

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文