JSRUN 用代码说话

ConvexHull

编辑教程

ConvexHull

实现Quickhull算法的方法是:Dirk Gregorius。2014年3月,游戏开发者大会:实施QuickHull。

构造器

ConverxHull()

属性

.分配:顶点列表

此顶点列表包含指定给面的所有顶点。默认为空顶点列表。

.面:阵列

凸面外壳的生成面。默认为空数组。

.newFaces:数组

此数组保存在单个迭代中生成的面。默认为空数组。

.公差:浮动

用于内部比较运算的epsilon值。此值的计算取决于几何体的大小。默认值为-1。

.未指定:顶点列表

此顶点列表包含未指定给面的所有顶点。默认为空顶点列表。

.顶点:数组

给定几何数据的内部表示(顶点数组)。

方法

.addadjacingFace(eyeVertex:顶点节点,horizonEdge:半边缘):半边缘

eyeVertex-添加到外壳的顶点。

地平线-地平线的单一边缘。

创建具有顶点的面eyeVertex.point', '水平边缘.尾部'和'水平边.head“按逆时针方向。因此,所有的半面都是按逆时针方向创建的

.addNewFaces(eyeVertex:VertexNode,horizonEdge:HalfEdge):ConverxHull

eyeVertex-添加到外壳的顶点。

地平线-形成地平线的一系列半边。

添加'水平线长度'面向船体,每个面将与地平线相对面和左/右面链接。

.addVertextFace(顶点:顶点,面:面):ConverxHull

顶点-要添加的顶点。

面-目标面。

将顶点添加到“指定”顶点列表并将其指定给给定面。

.addVertexHull(eyeVertex:VertexNode):ConverxHull

eyeVertex-添加到外壳的顶点。

使用以下算法向外壳添加顶点

计算“地平线”是一个半边链。对于属于此组的边,它必须是连接一个可以看到“eyeVertex”的面和一个看不到“eyeVertex”的面的边。

所有可以看到“eyeVertex”的面都将其可见顶点从指定的顶点列表中移除。

“地平线”和“eyeVertex”的每个边都将创建一组新的面。每个面都与相对的水平面和左/右的面相连接。

如果可能,将从所有可见面移除的顶点指定给新面。

.cleanup():converxhull

在计算凸包之后清理内部属性。

.compute():converxhull

开始执行快速外壳算法。

.computeExtremes():对象

计算将用于计算初始外壳的极值(最小/最大向量)。

.computeHorizon(视点:Vector3,crossEdge:HalfEdge,face:face,horizon:Array):ConvexHull

视点-点的三维坐标。

crossEdge-用于跳转到当前面的边。

面-正在测试的当前面。

地平线-沿逆时针方向构成地平线一部分的边缘。

按逆时针顺序计算一个半边链,称为“地平线”。要使边成为地平线的一部分,它必须连接一个可以看到“视点”的面和一个看不到“视点”的面。

.computeInitialHull():ConverxHull

计算初始单纯形,将所有候选点分配给其面,以形成船体的一部分。

.containsPoint(点:Vector3):converxhull

点-三维空间中的点。

如果给定点在此凸壳体内,则返回true。

.deleteFaceVertices(面:面,吸收面:面):凸面

面-给定的面。

吸收面-一个可选的面,尝试吸收第一个面的顶点。

移除“face”能够看到的所有可见顶点。

如果“吸收面”不存在,则所有移除的顶点将添加到“未指定”顶点列表中。

如果存在“吸收面”,则此方法将指定“面”的所有可以看到“吸收面”的顶点。

如果顶点看不到“吸收面”,它会被添加到“未指定”顶点列表中。

.intersectRay(光线:光线,目标:向量3):向量3

射线-给定的射线。

目标-表示交点的目标向量。

使用此converxt外壳执行光线相交测试。如果没有找到交集,则返回null。

.intersectsRay(ray:ray):布尔值

射线-给定的射线。

如果给定的光线与此凸壳相交,则返回true。

.makeEmpty():converxhull

使这个凸壳变空。

.nextVertextAdd():顶点节点

查找下一个顶点以使用当前外壳线创建面。

让初始面成为“指定”顶点列表中存在的第一个面。

如果一个面不存在,那么返回,因为没有剩下的顶点。

否则,对于面看到的每个顶点,找到距离它最远的顶点。

.reindexFaces():ConverxHull

从内部面删除非活动(例如删除)面

JSRUN闪电教程系统是国内最先开创的教程维护系统, 所有工程师都可以参与共同维护的闪电教程,让知识的积累变得统一完整、自成体系。 大家可以一起参与进共编,让零散的知识点帮助更多的人。
X
支付宝
9.99
无法付款,请点击这里
金额: 0
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
如有疑问请联系QQ:565830900
正在生成二维码, 此过程可能需要15秒钟