我正在研究用于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;
}
}
}
}
提前感谢任何帮助我的人:)!
答案 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
将溢出为正数)。