本文主要是介绍threejs 根据离散点生成不规则三角网(三角剖分),检测点是否在该三角网内(区域搜索),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
我们知道threejs中的模型都是一个个三角网组成的,三角网数量越多,模型就越精细。
在 Three.js 中,你可以通过创建一个三角网格对象来表示三维模型,这个对象通常由一个顶点数组和一个索引数组构成。顶点数组包含了模型的各个顶点的坐标信息,而索引数组则定义了如何将这些顶点连接起来形成三角形。通过修改这些顶点的坐标信息,你可以改变模型的形状,从而实现各种各样的动态效果。
一、导入剖分三角形网格的库
npm install delaunator
//引入
import Delaunator from "delaunator";
二、计算三角形顶点索引
//传入数据points:[{x:0,y:0,z:0}]
const points3d = points.map((t) => new Vector3(t.x, t.y, t.z));const indexDelaunay = Delaunator.from(points3d.map((v) => {return [v.x, v.z];})
);
三、生成模型
const geom = new BufferGeometry().setFromPoints(points3d);
const meshIndex = [];
for (let i = 0; i < indexDelaunay.triangles.length; i++) {meshIndex.push(indexDelaunay.triangles[i]);
}
geom.setIndex(meshIndex);
const mesh = new Mesh(geom,new MeshBasicMaterial({color: "red",wireframe: true,transparent: true,opacity: 0.5,side: THREE.DoubleSide,//双面展示
}));
scene.add(mesh)//添加到场景
四、检测点是否在网格内
判断点是否在网格内,并且与网格的垂直距离不超过 (阈值)
思路:
1.遍历顶点索引,然后取出对应顶点坐标,生成三角形
2.计算三角形平面法向量,计算点到三角形平面所在距离,如果小于等于某个阈值,就继续检查是否在三角形内部
3.计算投影点,检查投影点是否在三角形边界上,在就返回true,否则返回false
这篇关于threejs 根据离散点生成不规则三角网(三角剖分),检测点是否在该三角网内(区域搜索)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!