Example #1
0
  public static double[][] getFastNoise2D(
      Noise noise,
      int xSize,
      int zSize,
      int samplingRate,
      int x,
      int y,
      int z,
      int xZoom,
      int zZoom) {
    if (samplingRate == 0) {
      throw new IllegalArgumentException("samplingRate cannot be 0");
    }
    if (xSize % samplingRate != 0) {
      throw new IllegalArgumentException("xSize % samplingRate must return 0");
    }
    if (zSize % samplingRate != 0) {
      throw new IllegalArgumentException("zSize % samplingRate must return 0");
    }

    double[][] noiseArray = new double[xSize + 1][zSize + 1];

    for (int xx = 0; xx <= xSize; xx += samplingRate) {
      noiseArray[xx] = new double[zSize + 1];
      for (int zz = 0; zz <= zSize; zz += samplingRate) {
        noiseArray[xx][zz] = noise.noise3D((x + xx) >> xZoom, y, (z + zz) >> zZoom);
      }
    }

    for (int xx = 0; xx < xSize; ++xx) {
      if (xx % samplingRate != 0) {
        noiseArray[xx] = new double[zSize + 1];
      }

      for (int zz = 0; zz < zSize; ++zz) {
        if (xx % samplingRate != 0 || zz % samplingRate != 0) {
          int nx = xx / samplingRate * samplingRate;
          int nz = zz / samplingRate * samplingRate;
          noiseArray[xx][zz] =
              Noise.bilinearLerp(
                  xx,
                  zz,
                  noiseArray[nx][nz],
                  noiseArray[nx][nz + samplingRate],
                  noiseArray[nx + samplingRate][nz],
                  noiseArray[nx + samplingRate][nz + samplingRate],
                  nx,
                  nx + samplingRate,
                  nz,
                  nz + samplingRate);
        }
      }
    }
    return noiseArray;
  }