Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何修改三维洞穴系统,使其不会从表面移除尽可能多的材质?_Java_Lwjgl_Noise_Procedural Generation - Fatal编程技术网

Java 如何修改三维洞穴系统,使其不会从表面移除尽可能多的材质?

Java 如何修改三维洞穴系统,使其不会从表面移除尽可能多的材质?,java,lwjgl,noise,procedural-generation,Java,Lwjgl,Noise,Procedural Generation,目前,我正在处理一个涉及3d噪音和Marching Cubes算法的项目,以创建一个3d程序生成的世界。我已经有了代码,可以使用2d和3d simplex噪波的混合来创建具有山脉、悬崖和悬挑的地面。为了实现cave系统,我简单地使用3d simplex noise在主地形网格下雕刻出空白空间(因为我使用的是marching cubes算法,任何低于surfaceLevel变量的顶点都被视为空白空间)。我现在面临的主要问题是地面上出现了太多的洞穴。我遇到的一个解决办法是,以某种方式使洞穴越靠近地表

目前,我正在处理一个涉及3d噪音和Marching Cubes算法的项目,以创建一个3d程序生成的世界。我已经有了代码,可以使用2d和3d simplex噪波的混合来创建具有山脉、悬崖和悬挑的地面。为了实现cave系统,我简单地使用3d simplex noise在主地形网格下雕刻出空白空间(因为我使用的是marching cubes算法,任何低于surfaceLevel变量的顶点都被视为空白空间)。我现在面临的主要问题是地面上出现了太多的洞穴。我遇到的一个解决办法是,以某种方式使洞穴越靠近地表越窄。然而,我不知道如何实现这一点。我遇到的另一个解决方案是从视频中创建一个噪声屏蔽(同样,我不知道这是如何工作的,也不知道如何实现)。我将如何实施这些方法,或者是否有更好的方法来实现这些方法,以使洞穴不会移除尽可能多的表面

当前问题

当前代码

        for(int y = 0; y<height+1; y++){
            for(int x = x1; x<x1+width+1; x++){
                for(int z = z1; z<z1+width+1; z++){ 
                    double noise3d = this.sumOctaves(4,x,y,z,0.5,0.01,0,1); // creates 3d terrain like caves and overhangs
                    double noise2d = this.sumOctaves(4,x,z,0.5,0.01,0,1); // creates 2d terrain like mountains and hills (gives only height)
                    double cave = this.sumOctaves(1,x,y,z,0.5,0.035,0,1); // creates 3d terrain like caves and overhangs
                    double mask =  this.sumOctaves(1,x,z,0.1,0.0019,0,1); // creates a 2d mask to vary heights of regions, lower the scale more diversity in regions, higher the scale more mountains and canyons
                    float curHeight = -y+height/3+(float)height*(float)(noise2d*(1-perlin3Dratio)+noise3d*perlin3Dratio)*(float)mask; // mixing them together with correct ratio of 3d and 2d data
                    if(cave < surfaceLevel){//checks if the noise value is empty space
                        curHeight = (float)cave;
                    }
                    terrainMap[x-x1][y][z-z1] = curHeight;
                }
            }
        }

for(int y=0;Yauperly Minecraft洞穴不是由3d噪音形成的。相反,他们使用柏林虫洞。你能从侧面解决问题并接受表面洞穴,但随后“侵蚀”它们一点吗?取决于侵蚀程度,你会得到边缘锋利的小山谷(可识别的火山口或火山口——在我看来,实际上有点酷)或光滑的边缘(可以忽略的凹痕)。是什么阻止了你这么做?我意识到你在遵循数学方法,而不是探测洞穴和表面。但目标是严格的“洞穴-表面碰撞”与所描述的问题相关,你可能无法更明确地处理它们。这可能不会给你想要的结果,但一个非常简单的尝试选项是不允许在某个y水平以上的洞穴。显然,雷击机洞穴不是由3d噪音形成的。相反,他们使用Perlin Worms。你能稍后再处理这个问题吗接受表面的洞穴,然后“侵蚀”它们一点?根据侵蚀程度的不同,你会得到有锋利边缘的小山谷(可识别的火山口或火山口——在我看来,实际上有点酷)或光滑边缘(可以忽略不计的凹痕).是什么阻止了你这么做?我意识到你是在遵循数学方法,而不是探测洞穴和地表。但目标是严格意义上的“洞穴-地表碰撞”与所描述的问题相关,您可能无法更明确地处理它们。这可能不会给您想要的结果,但一个非常简单的尝试选项是不允许在某个y级别以上出现洞穴。