【问题标题】:Java - Perlin noise that loopsJava - 循环的 Perlin 噪声
【发布时间】:2012-08-22 16:40:28
【问题描述】:

我需要使用我编写的柏林噪声程序在 Java 中为 3D 行星(球体)生成纹理。但问题是左右必须相同,上下也必须相同,这样您才能将纹理放在球体上。

perlin 噪声源我不能放在这里,因为它太长了,但它主要基于http://devmag.org.za/2009/04/25/perlin-noise/

【问题讨论】:

    标签: java noise


    【解决方案1】:

    perlin 噪声的工作方式是在网格值之间进行插值。

    为此,单纯形噪声会更合适(否则两极处的噪声密度将不一样,因为您无法用正方形正确地铺设球体)。

    您需要将球体划分为单纯形(在您的情况下为三角形),然后为每个三角形角度(每个点仅一次)随机化一个值。

    然后就可以用单纯形噪声法插值计算出三角形每个点的纹理了。

    【讨论】:

      【解决方案2】:

      如果您的噪声函数缩放到 4D,那么您可以使用两个 2D 圆的坐标输入 x,y,z,w。生成的图像将在 x 和 y 轴上以最佳方式平铺。

      例如(非常草率但为了清楚起见):

      float textureSize = 1024.0f;
      
          for(float i = 0.0f; i < textureSize; i += 1.0f){
      
            for(float j = 0.0f; j < textureSize; j += 1.0f){
      
              nx = cos((i / textureSize) * 2.0f * PI);
              ny = cos((j / textureSize) * 2.0f * PI);
              nz = sin((i / textureSize) * 2.0f * PI);
              nw = sin((j / textureSize) * 2.0f * PI);
      
              looped_noise = noise_4D( nx, ny, nz, nw, octaves, persistence, lacunarity, blah...);
              noise_buffer[((int)i * (int)textureSize) + (int)j] = looped_noise;
      
            }
          }
      

      如果您的函数不能轻松扩展到 4D,请尝试使用任何单纯形噪声实现。

      【讨论】:

        猜你喜欢
        • 2011-07-28
        • 2013-10-11
        • 2014-02-15
        • 2020-06-06
        • 2011-09-20
        • 2021-06-30
        • 2013-07-23
        • 2020-06-22
        • 2011-03-19
        相关资源
        最近更新 更多