java - 如何在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);
}
}
结果
如果您知道我可以生成更逼真的森林的任何方法,请告诉我这将对我有很大帮助。
提前致谢
解决方案
首先看看我的:
如您所见,您可以根据海拔、坡度等计算生物群落……更复杂的生成器创建一个Voronoi地图,将您的地图划分为生物群落区域,根据已分配的邻居随机分配(有一些规则)生物群落类型……
回到你的问题,你应该把你的树放在某个位置周围更密集,而不是用稀疏的树均匀地覆盖大面积......所以你需要稍微不同类型的随机分布(如高斯)。见传说:
关于如何从统一的分布中获得不同的分布......
因此,您应该做的是获得几个随机位置,这些位置可以均匀地覆盖您的区域形状。然后生成密度取决于到这些点的最小距离的树。距离越小密集的树木放置。
推荐阅读
- javascript - 复选框onCheck在javascript React native中无法正常工作
- html - 是否可以使用 HTML5 文件上传将文件从共享点位置上传/选择到应用程序?
- c# - CMD Copy 命令未通过 C# 正确执行
- python - 搜索每个值时,发送 POST 请求时输出为空列表
- jenkins - Groovy 子字符串 Jenkinsfile
- javascript - onclick 调用显示错误的函数:“返回是关键字”
- terraform - 为什么 Terraform 要再次创建自定义属性?
- c - 什么是 Clang 的“-z”选项,为什么需要它?
- flutter - 无法显示来自快照的字符串
- javascript - JSDOC 记录事件监听器 (addEventListener)