首页 > 解决方案 > 如何在java中生成森林

问题描述

我正在创建一个游戏,其中生成的景观所有世代都可以完美运行,一周前我创建了一个基本的“森林”生成系统,它只是一个占用一大块的 for 循环,并将随机数量的树木放置在随机位置. 但这并没有给出我想要达到的结果。

代码

for(int t = 0; t <= randomForTrees.nextInt(maxTreesPerChunk); t++){

    // generates random locations for the X, Z positions\\
    // the Y position is the height on the terrain gain with the X, Z coordinates \\
    float TreeX = random.nextInt((int) (Settings.TERRAIN_VERTEX_COUNT + Settings.TERRAIN_SIZE)) + terrain.getX();
    float TreeZ = random.nextInt((int) (Settings.TERRAIN_VERTEX_COUNT + Settings.TERRAIN_SIZE)) + terrain.getZ();
    float TreeY = terrain.getTerrainHeightAtSpot(TreeX, TreeZ);

    // creates a tree entity with the previous generated positions \\
    Entity tree = new Entity(TreeStaticModel, new Vector3f(TreeX, TreeY, TreeZ), 0, random.nextInt(360), 0, 1);

    // checks if the tree is on land \\
    if(!(tree.getPosition().y <= -17)){
        trees.add(tree);
    }

}

结果

带有上述基本生成代码结果的图像

如果您知道我可以生成更逼真的森林的任何方法,请告诉我这将对我有很大帮助。

提前致谢

标签: javaopengllwjgllandscape

解决方案


首先看看我的:

如您所见,您可以根据海拔、坡度等计算生物群落……更复杂的生成器创建一个Voronoi地图,将您的地图划分为生物群落区域,根据已分配的邻居随机分配(有一些规则)生物群落类型……

回到你的问题,你应该把你的树放在某个位置周围更密集,而不是用稀疏的树均匀地覆盖大面积......所以你需要稍微不同类型的随机分布(如高斯)。见传说:

关于如何从统一的分布中获得不同的分布......

因此,您应该做的是获得几个随机位置,这些位置可以均匀地覆盖您的区域形状。然后生成密度取决于到这些点的最小距离的树。距离越小密集的树木放置。

地点


推荐阅读