Perlin Noise仅产生0

时间:2014-01-23 04:41:47

标签: java

我正在研究用于Java视频游戏的Perlin Noise生成器。问题是每当我运行我的发生器时,我得到的唯一输出是0.因为我是Perlin Noise的新手我不太确定要尝试什么,因此我没有尝试任何东西,除了调整数字没有变化。

这是我的perlin噪音代码:

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;
        }
    }
}

}

提前感谢任何帮助我的人:)!

1 个答案:

答案 0 :(得分:0)

许多循环根本不会运行,因为条件永远不会成立。例如这一个

for(int cx=0;x<x;x+=Math.pow(2, co))
由于x永远不会小于x

将无法投放。

另一个例子就是这个

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

条件x<(x - 1)仅在x是可能的最小整数时才为真(因为x-1将溢出为正数)。