球面地图网格的设计

原文转载自 「云风的 BLOG」 ( https://blog.codingnow.com/2021/10/cube_sphere.html ) By 云风

预计阅读时间 0 分钟(共 0 个字, 0 张图片, 0 个链接)

最近几年有很多基于球体地图的游戏,包括今年颇有好评的戴森球计划。

大多数在球面打格子分割地图的游戏,会采用六边形网格。但是,只靠正六边形网格无法铺满整个球面。必然会留下 12 个五边形。因为用正六边形铺满球面时,其实是在尝试用正 20 面体逼近球体。如果我们将正 20 面体做平面展开,每个三角形面中划分多个正三角形,每 6 个三角形合成一个正六边形,但中间的 12 个交接点必然是 5 个三角形缝合。只要处理好这个五边形,尝试用六边形网格做游戏是个合适的选择。

据戴森球计划的开发日志所述,开发团队也曾考虑过六边形网格方案,后来觉得不合适又回归四边形。我猜想多少和戴森球计划参照的游戏原型异星工厂是四边形网格有点关系。我也觉得在四边形网格上设计这种传送带游戏更舒适。不过,相比目前戴森球计划中用的方案:从赤道到两极,沿着纬线圈一圈圈减少网格数量;我更喜欢网格能完全对齐的方案。

如果像戴森球计划那样,往高维铺建筑,能用的格子越来越少,就很难让建筑沿经线对齐。看起来不整洁,而且为这类自动化游戏中开展大规模生产必备的蓝图功能的实现制造不必要的麻烦。

让我们考虑回平面地图,考虑如何把一张地图映射回球面。像文明那样,我们可以让地图的东西循环相接。但这样的世界实际上是一个圆柱体。那么让南北也循环相接如何?那其实是个面包圈世界,远非球面。因为我们一直向北走,越过北极就突然来到了南极,未免和现实世界相差太远。

其实,除了上面所述用正 20 面体逼近球面外;我们还可以选择用正六面体。这在天文领域有非常成熟的方案:NASA 就用 COBE Quadrilateralized Spherical Cube 来绘制天体的地图。我们把整个球面划分为 6 个对等的区域,每个区域都用 n * n 的四边形网格即可。除了 8 个顶点附近少许网格的拓扑关系有些特殊外,其它均与普通的平面网格无异。

这里有一篇文章详细讲述了如何在球面实现这样的地图

more_vert