我怎么能像这样绘制一个Outlined Mesh?

时间:2013-07-24 00:02:27

标签: java 3d lwjgl simplex-noise

所以我看到一篇关于解析OBJ文件的博客,但真正引起我注意的是他们正在解析的对象(这个问题不是解析OBJ文件)。

enter image description here

我知道网格是使用3D噪声算法创建的,可能是单纯形噪声,但我想知道的是我如何能够在LWJGL中产生类似的线条效果。

我已经有了一个3D单纯形噪声算法,以及一些我认为可行的代码,但实际上并没有做同样的事情。

我注意到网格的模式是有一排行从噪声密度最高的外部开始。然后这些线基于特定点的噪声密度进化,所以我试图做的是制作一个算法来产生这些线并进化它们,但这并不是那么有效。

SimplexNoise noise = new SimplexNoise(23453) //Variable is the seed
worldList = glGenLists(1);
glNewList(worldList, GL_COMPILE); //Inefficient but gets the job done
    float prevx = 0.0f;
    float prevy = 0.0f;
    float prevz = 0.0f;
    for(int x=0;x<256;x++){
        for(int y=0;y<256;y++){
            for(int z=0;z<256;z++){
                float xf = x/100;
                float yf = y/100;
                float zf = z/100;
                density = noise.simplex(3,xf,yf,zf); //octaves,x,y,z
                if(density>3){ //filter out some results
                    drawLine(prevx,prevy,prevz,x+1,y*density,z*density);
                    drawLine(prevx,prevy,prevz,x*density,y+1,z*density);
                    drawLine(prevx,prevy,prevz,x*density,y*density,z+1);
                }
            }
        }
    }
glEndList();

不应该很难意识到这不会产生任何接近相同结果的东西。我不知道如何接近或完全产生相同的网格形状或类似的东西,所以任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

我不熟悉LWJGL,但我认为就算法本身而言,我可以指出正确的方向。您可以将Perlin / Simplex噪声插入行进立方体算法并从中生成三角形网格。我使用这种技术来创建这个网格:

Perlin Noise and Marching Cubes

我相信您可以通过绘制输出网格的线框来获得所需的结果。毕竟,如果你仔细观察,所有这些线都会形成三角形。您可以找到有关行进多维数据集here的更多信息。