« Paradox 脚本语言的一点研究 | 返回首页 | 米勒拉宾素数检验 »

球面地图网格的设计

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

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

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

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

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

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

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

Comments

我用汉芯1号有10多年了,有人吹吹他们,升级成汉芯2号行吗?现在用着似乎比美国的AMD慢点了。

光线追踪,楼下。

如果是平面地图中,如何实现不同区域的日出日落的问题呢,根据相机的位置改变太阳的位置么

今天看到这新闻(https://baijiahao.baidu.com/s?id=1713504630049030627&wfr=spider&for=pc)“活的2万,死的5万”,好一个“生不如死”的诠释。

你这个算法,在高等几何中有一门课叫射影几何,早期的射影几何,是通过罗氏几何演化而来的,是一门非量化的,公理体系的几何学,球面几何是射影几何的一种极端方式,当笛卡尔的平直坐标系量化几何出现以后,实际上现在的科学计算界,这三者都是互相交织的一个现状,前沿是微分几何和玄理论几何,现在10000亿美元的3D显卡市场,都是基于这几本书而已。
值得一提的是,在苏联的有一个有名的数学家,把复变函数和黎曼几何结合起来,解决了一个非常复杂的空气动力学问题,这个论文在1950~1965之间发表的。

显卡中把3D的矢量模型渲染成视频流的过程,就是把曲线使用多边形来模拟,生成的多边形越多,那么曲线越接近真实的那个矢量解,事实上早期的显卡生成的位图如果放大就能看出多边形,当然了,现在是用工具都分析不出来,现在显卡太强大了,可能生成的多边形的边长已经远远低于屏幕的像素密度了。

显卡中把3D的适量模型渲染成视频流的过程,就是把曲线使用多边形来模拟,生成的多边形越多,那么曲线越接近真实的那个矢量解,事实上早期的显卡生成的位图如果放大就能看出多边形,当然了,现在是用工具都分析不出来,现在显卡太强大了,可能生成的多边形的边长已经远远低于屏幕的像素密度了。

看穿事物的思维能力真强

Post a comment

非这个主题相关的留言请到:留言本