使用perlin噪波在C#中生成地形



我正在C#和XNA中开发文明游戏。我使用一个二维整数数组,填充一个循环来生成瓦片,我做了大量的研究,但一直无法找到生成类似地球地形的方法。有人能解释一下如何做到这一点吗?或者至少给我一个可以做到的代码,尽管我更喜欢并解释一下?非常感谢。

我使用类似的算法来制作地形。基本上,它会生成一些随机数,并使用正弦波生成山丘,当它们结合在一起时,会形成一个漂亮的丘陵景观。请注意,如果只需要3次以上的传递,则可以添加循环和值数组。

private void GenerateTerrain()
    {
        terrainContour = new int[Width*Height];
        //Make Random Numbers
        double rand1 = randomizer.NextDouble() + 1;
        double rand2 = randomizer.NextDouble() + 2;
        double rand3 = randomizer.NextDouble() + 3;
        //Variables, Play with these for unique results!
        float peakheight = 20
        float flatness = 50 
        int offset = 30;

        //Generate basic terrain sine
        for (int x = 0; x < Width; x++)
        {
            double height = peakheight / rand1 * Math.Sin((float)x / flatness * rand1 + rand1);
            height += peakheight / rand2 * Math.Sin((float)x / flatness * rand2 + rand2);
            height += peakheight / rand3 * Math.Sin((float)x / flatness * rand3 + rand3);
            height += offset;
            terrainContour[x] = (int)height;
        }
    }

然后,要填充高度图,只需循环遍历这些值,并检查它是否高于阈值。

for (int x = 0; x < Width; x++)
{
   for (int y = 0; y < Height; y++)
   {
       if (y > terrainContour[x])
           tiles[x, y] = Solid Tile
       else
           tiles[x, y] = Blank Tile
   }
}

你可以添加更多,我添加了更多的随机性,并将一些瓷砖向上或向下缩进1,以获得更好的地形。添加更多的正弦波会使其更加逼真。

尝试使用2D Perlin Noise算法,并选择一定的高度来制作洞穴和更先进的地形,因为我现在就是这样做的,但这里的代码是一个好的开始。

相关内容

  • 没有找到相关文章

最新更新