2014-01-23 112 views
0

我正在爲Java視頻遊戲開發Perlin噪聲生成器。問題是,每當我運行我的發生器時,我得到的唯一輸出就是0.由於我是Perlin Noise的新手,我不確定要嘗試什麼,因此除了對數字進行調整而沒有任何改變之外,我沒有嘗試過任何其他的東西。Perlin僅生成噪音0

這裏是我的柏林噪聲代碼:

package PerlinGen; 
import java.util.*; 

public class PerlinNoiseGenerator { 
private Random random; 
private int octaves, x, y; 
private int[][][] heightMap; 

public PerlinNoiseGenerator(int octaves, int x, int y, long seed){ 
    heightMap = new int[octaves][x][y]; 
    this.octaves = octaves; 
    this.x = x; 
    this.y = y; 
    random = new Random(seed); 
} 

public int[][] generate(int ic){ 
    for(int co=1;co<=octaves;co++){ 
     for(int cx=0;x<x;x+=Math.pow(2, co)){ 
      for(int cy=0;y<y;y+=Math.pow(2, co)){ 
       square(co, cx, cy, (int) (cx + Math.pow(2, co) - 1), (int) (cy + Math.pow(2, co) - 1), random.nextInt(co)); 
      } 
     } 

     for(int ci=0;ci<ic;ci++){ 
      for(int cx=1;x<(x - 1);x++){ 
       for(int cy=1;y<(y - 1);y++){ 
        heightMap[co][cx][cy] = (
         heightMap[co][cx][cy] + 
         heightMap[co][cx + 1][cy] + 
         heightMap[co][cx - 1][cy] + 
         heightMap[co][cx][cy + 1] + 
         heightMap[co][cx][cy - 1] 
        )/5; 
       } 
      } 
     } 
    } 

    int[][] perlinNoise = new int[x][y]; 
    for(int cx=1;x<(x - 1);x++){ 
     for(int cy=1;y<(y - 1);y++){ 
      perlinNoise[cx][cy] = 0; 

      for(int co=1;co<=octaves;co++){ 
       perlinNoise[cx][cy] += heightMap[co][cx][cy]; 
      } 
     } 
    } 

    return perlinNoise; 
} 

private void square(int o, int sx, int sy, int ex, int ey, int v){ 
    for(int x=sx;x<ex;x++){ 
     for(int y=sy;y<ey;y++){ 
      heightMap[o][x][y] = v; 
     } 
    } 
} 

} 

謝謝你在前進的人誰幫助我:)!

回答

0

你的許多循環根本不會運行,因爲條件從來都不是真的。例如,這一個

for(int cx=0;x<x;x+=Math.pow(2, co)) 

將無法​​運行,因爲x是從來沒有超過x小。

另一個例子是如果x爲最小的可能的整數(因爲x-1將溢出到正數)這一個

for(int cx=1;x<(x - 1);x++) 

條件x<(x - 1)只有真實的。