我正在设计一个部分由行星探索组成的游戏。我想为它们使用伪随机生成,当我不得不加载它们而不是存储每个细节的时候,从定义的种子重新生成,这会太繁琐。因此,我将随机种子和玩家所做的修改(如果有)存储在文件中。
玩家必须能够从轨道上看到行星(细节水平非常低,然后下降到地面,缓慢增加他/她着陆区域的细节水平,并从另一侧卸下超出玩家视野的行星。
如果必须在平坦的地面上进行操作,则可以使用正方形块系统轻松进行操作。但是这里的问题是行星几乎是球体。
那么,在精确点附近加载地面细节(起伏和接地物体)的最佳方法是什么?
我虽然已经提出了两种解决方案,但是两者都有一个弱点:
1.将球切成正方形块。
一旦玩家离地面足够近,我只需要从他/她的位置改善最接近的正方形的细节即可。
如果这还不够,当玩家在地面上或真的离地面很近时,我仍然可以在子正方形中切割每个正方形以进行加载。
但是,正如您在图片上看到的那样,如果玩家尝试着陆,那将是一个问题:正方形变成非常细长的矩形,甚至最后一行都变成三角形,此外还要加载很多东西,一代似乎会扭曲。
2.从二十面体开始。
在这里,我可以在玩家靠近时增加围绕他的位置的三角形镶嵌。
但是我不知道如何将三角形定位成比玩家的位置更近。我听说笛卡尔坐标在这种情况下可能有用,但我不知道如何使用它们。
我正在使用C ++ / OpenGL,所以这里要生成和加载的主要是表示表面浮雕和颜色/纹理的顶点。