java - 如何用java生成森林

标签 java opengl lwjgl landscape

我正在创建一个游戏,其中会生成一个景观,所有的生成都完美地工作,一周前我创建了一个基本的“森林”生成系统,它只是一个 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);
    }
}

结果:

Image with the result of the basic above seen generation code

最佳答案

首先看看我的:

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

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

关于如何从均匀分布中获得不同的分布...

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

placemet

关于java - 如何用java生成森林,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55322029/

相关文章:

java - 指针 - 减少内存消耗

java - 如何使用 LWJGL 和 Slick2D 将图像添加到已绘制的框

java - Hibernate SessionFactory 如何使用 LocalSessionFactoryBean Autowiring ?

java - 无法弄清楚为什么 TextView 不会更新到 SQLite 结果

c++ - 4维游戏渲染优化

java - 除了使用 swt 绘图之外,还有更好的选择吗?

java - 如何迭代 Firebase 实时数据库中多个按键的子项?

java - 密码错误解密java

c - 打开 gl 计算着色器和帧缓冲区

调用 glDrawElements() 时发生 Java fatal error