我正在创建一个游戏,其中会生成一个景观,所有的生成都完美地工作,一周前我创建了一个基本的“森林”生成系统,它只是一个 for 循环,需要一 block ,并放置随机数量的树木在随机地点。但这并没有给出我想要达到的结果。
代码:
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);
}
}
结果:
最佳答案
首先看看我的:
如您所见,您可以根据海拔、坡度等计算生物群落...更复杂的生成器会创建一个 Voronoi map ,将您的 map 划分为生物群落 根据已分配的邻居随机分配(有一些规则)生物群落类型的区域...
回到你的问题,你应该在某个位置周围放置更密集的树木,而不是用稀疏的树木均匀覆盖大面积......所以你需要稍微不同类型的随机分布(如高斯)。参见传说:
关于如何从均匀分布中获得不同的分布...
所以你应该做的是获得一些随机位置来均匀地覆盖你的区域形状。然后生成密度取决于到这些点的最小距离的树。距离越小,树木放置越密集。
关于java - 如何用java生成森林,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55322029/