2012-08-28 115 views

回答

1

柏林噪聲的工作方式是,它一格的值之間的插值。

爲了這個目的,單純的噪音會更合適(否則噪音密度在兩極將不會相同,因爲您無法正確地用正方形鋪設球體)。

你需要將你的球體分成單形(在你的案例中是三角形),然後是每個三角形(每個點只有一次),隨機化一個值。

然後,您可以通過使用單純形噪聲方法進行插值來計算三角形每個點處的紋理。

0

如果你的噪聲函數縮放到4D,那麼你可以用兩個二維圓的座標來給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,嘗試用任何單一的噪音實現在那裏。