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
从内部面删除非活动(例如删除)面
选择支付方式:
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间