基于Marching Squares算法的海洋网格凹曲线孔洞问题求解
Marching Squares海洋网格生成的凹曲线孔洞问题
我正在开发一款基于Marching Squares算法的海洋网格生成算法,通过判断网格点是否处于海平面以下或恰好位于海平面来生成轮廓。当前遇到的核心问题是:凹曲线上会出现孔洞(凸曲线上海洋网格嵌入陆地网格的表现符合预期)。
以下是获取图中紫色顶点位置的核心代码:
Vector2 GetLerpedEdgePoint(CellPoint cellPoint, Vector2 gridPos) { int corner1Index = cellPoint.AdditionalPos.Corner1Offset; int corner2Index = cellPoint.AdditionalPos.Corner2Offset; // 获取顶点的海洋数据,用到"DistanceToZero"值 OceanVertData Corner1VertData = _corners[corner1Index]; OceanVertData Corner2VertData = _corners[corner2Index]; // 在两个顶点间插值得到边缘点 Vector2 corner1Pos = _gridPosOffsets[corner1Index] + gridPos; Vector2 corner2Pos = _gridPosOffsets[corner2Index] + gridPos; // 海平面被视为0,但为了插值公式生效,我将其视为1,所以给a和b各加1 float a = Corner1VertData.DistanceToOceanLevel + 1; float b = Corner2VertData.DistanceToOceanLevel + 1; return LerpCloseToOne(a , b, corner1Pos, corner2Pos); } Vector2 LerpCloseToOne(float valueA, float valueB, Vector2 a, Vector2 b) { return Vector2.Lerp(a, b, (1 - valueA) / (valueB - valueA)); }
直接提高海平面只是治标不治本的临时方案,我也考虑过让边缘点成为陆地曲线切线的一部分,但不确定具体实现方式。请问该如何彻底解决凹曲线的孔洞问题?
问题示意图:
内容的提问来源于stack exchange,提问作者Stefan Carpeliuc
相关产品推荐
相关产品推荐

