2016-10-16 57 views
0

我得到了Perlin噪聲算法和opensimplex噪聲算法,該算法根據給出的X和Y值返回double。我設計的軟件,我想知道如何:使Perlin噪聲可擴展

  • 規模有0-1雙值Perlin雜
  • 允許建立在不同的分辨率。柏林(即1024,2048),但仍維持規模,但增加額外的細節。
  • 允許用戶改變世界的大小,這也影響了規模

我當前的代碼如下:

double scale = ((((Double) parameters.get(SCALE).getValue() * 10) + 0.25) * ProjectSettings.WORLD_SIZE)/((double) resolution/1000); 
double x = 0; 
double y = 0; 
OpenSimplexNoise noise = new OpenSimplexNoise((Long) parameters.get(SEED).getValue()); 
for(int n = 0; n < resolution; n++) { 
    x += scale; 
    for(int m = 0; m < resolution; m++) { 
     y += scale; 
     values[n][m] = noise.generateOpenSimplexNoise(x, y, (Double) parameters.get(PERSISTENCE).getValue(), (Integer) parameters.get(OCTAVES).getValue()); 
    } 
} 

回答

-1

如果你想改變Perlin雜點圖像的分辨率,改變高度值for循環。 爲了進行縮放,您必須將Perlin噪聲方法的第一個和/或第二個參數乘以某個在您需要縮放時會發生變化的變量。時間值可能非常適合這一點。看下面的代碼示例。

time += 0.01; 
// Change height and width values to change resolution 
for(int y = 0; y < height; y++){ 
    for(int x = 0; x < width; x++){ 
     double dx = (double) x/MainWindow.height; 
     double dy = (double) y/MainWindow.height; 

     // Perlin noise method call 
     // In order to scale, you have to multiply current values 
     // by time or other variable, which change would cause the zoom. 
     double noise = noise(dx * time, dy * time); 
    } 
} 

這些教程系列可以幫助你實現你的目標:

https://www.youtube.com/playlist?list=PLA2Wxg-e7vbA1LC15uXM0s8p5Nhse_rNn

在教程3結束時,您應該可以進行縮放和移動動畫。如果你不想了解Perlin噪聲的機制,你可以跳過第二個教程。我希望它有幫助。