我想有效地为给定表面上的物体生成位置。你可能已经猜到这是一场比赛。表面实际上是一个三维地形,但第三维并不重要,因为它是由地形高度决定的。
问题是我想以最有效和最简单的方式做到这一点,但仍然会得到很好的结果。我所说的“自然”就像精神上的in this article about Perlin noise。 (树木形成森林,大到小群体散布在陆地上)这种方法很好,但太复杂了。我需要经常这样做,并且在没有任何更多纹理的情况下可以做到这一点,即使以更差的性能为代价(因此结果不会那么漂亮,但仍然足以给植物带来漂亮的自然地形)。
放置的物体数量各不相同,但一般在50左右。一个很好的增强功能是以某种方式限制物体在高海拔(山脉)的地方放置,但我想可以通过放置更多物体来完成删除高于给定高度的那些。
答案 0 :(得分:4)
这可能不是您正在寻找的答案,但我相信Perlin Noise是解决您问题的方法。
Perlin Noise本身不涉及纹理;我相信你对它是什么有误解。对于您的目的,它基本上是每个点的2D索引,介于0和1之间的值。您不需要生成任何纹理。有关详细信息和优雅解释,请参阅this description。 Perlin Noise的基础知识包括制作一些随机噪声图,从一个点很少的点开始,每个新点的随机点(和较低幅度)的两倍,并将它们加在一起。
特别是,如果您的地图是离散平铺的,您甚至不必以高分辨率生成噪音:)
您打算如何“经常”这样做?如果你每隔一帧 10次以上,那么Perlin Noise可能不就是你的答案。但是,如果您每隔<几秒钟(或更短)执行一次,那么我认为您不应该对速度影响任何担忧 - 至少,对于2D Perlin Noise。
建立这个,你可以看看this question和我个人的回答,它试图做一些与你想做的事情非常相似的事情。基本步骤涉及:
产生柏林噪音;更高的湍流=更少的结块和更多的孤立特征。
设置“阈值”(即0.5) - 高于此阈值的任何内容都被视为“开启”,高于此阈值的任何内容都被视为“关闭”。更高的阈值=更频繁,更低的阈值=更少的频率。
使用您正在制作的任何内容填充“on”瓷砖。
以下是Perlin Noise的一些示例,用于生成基于50x50 tile的地图。请注意,两者的性质之间的唯一区别是“阈值”。较大的团块意味着较低的阈值,较小的团块意味着较高的团块。
森林,有蓝色的树木和棕色的灌木丛 Sparse Forest http://img688.imageshack.us/img688/7005/forestmap.png
沼泽地,深处被较浅的区域包围 Marshes http://img202.imageshack.us/img202/5092/marshdemo.png
答案 1 :(得分:0)
请注意,你必须稍微调整一下常量,但你可以这样做
首先,选择一个随机点。 (比如24,50)。 接下来,确定此对象的兴趣点。如果它是一块岩石,你的分数可能是15,13或50,42的两座山。如果它是森林,它可能会做一些指标来找到几个当地森林的“中心”。 接下来,计算点和感兴趣点之间的距离矢量,并将它们按一定的常数进行缩放。 现在,将所有这些向量添加到该点。 接下来确定对象是否处于合法位置。如果是,则移动到下一个对象。如果不是,请重复此过程。
根据需要进行调整。 : - )
答案 2 :(得分:0)
有一件事:如果你想拒绝像山上树木这样的东西,你不会添加额外的尝试,你一直试图放置一个物体,直到你找到一个合适的位置,或者你已经尝试了很多次,你需要拯救,因为它看起来不太适合。