我需要使用我编写的perlin noise程序在Java中为3D行星(球体)生成纹理。但是需要注意的是,左侧和右侧需要相同,上下也一样,这样才能将纹理放置在球体上。
我不能把柏林噪声源放在这里,因为它太长了,但它主要是基于http://devmag.org.za/2009/04/25/perlin-noise/的
发布于 2012-08-28 15:47:57
perlin噪声的工作方式是它在栅格值之间进行插值。
为此,简单噪波将更合适(否则噪波密度将不会在极点相同,因为您无法使用正方形正确地铺设球体)。
您需要将球体划分为单形(在本例中为三角形),然后为每个三角形角度(每个点只有一次)随机化值。
然后,您可以通过使用单纯形噪波方法插值来计算三角形每个点处的纹理。
发布于 2012-09-22 00:50:34
如果您的噪波函数缩放到4D,那么您可以向x,y,z,w提供两个2D圆的坐标。生成的图像将在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,请尝试使用任何简单的噪声实现。
https://stackoverflow.com/questions/12154749
复制相似问题