Perlin Noise 세대에 약간의 문제가 있습니다. 어떻게 작동하는지 여러 기사를 읽었습니다. 나는 다음과 같은 코드로 구현 :이 거대한 코드 덤프Perlin 잡음이 작동하지 않습니다.
//performs perlin noise function
public static float[][] getPerlinNoise(int octaves, long seed) {
float[][] noise = new float[Main.csX][Main.csY];
for(int z = 0; z < octaves; z++) {
float f = (float)Math.pow(2, z);
PerlinNoise oct = new PerlinNoise(seed, f);
for(int y = 0; y < Main.csY; y++) {
for(int x = 0; x < Main.csX; x++) {
noise[x][y] = (noise[x][y] + oct.getInterpolatedNoise(x * f, y * f)) * (float)Math.pow(p, z); //<- pumps out numbers between -1.0 and 1.0
}
}
}
return noise;
}
죄송합니다 : 내가 함께 내 모든 옥타브를 추가 할 때 여기
package PerlinNoise;
import java.util.Random;
public class PerlinNoise {
private long seed;
private Random rand;
private float f;
public PerlinNoise(long seed, float f) {
this.seed = seed;
this.f = f;
rand = new Random();
}
//interpolates generated noise
public float getInterpolatedNoise(float x, float y) {
float a = (int) Math.floor((double) x/f);
float A = a + 1;
float b = (int) Math.floor((double) y/f); //<-- define the points around the point
float B = b + 1;
return cosineInterpolate(
cosineInterpolate((float) getNoise(a, b), (float) getNoise(A, b), (float) (x - a * f)/f),
cosineInterpolate((float) getNoise(a, B), (float) getNoise(A, B), (float) (x - a * f)/f),
(float) (y - b * f)/f); //<-- interpolates everything
}
//cosine interpolation
private float cosineInterpolate(float a, float b, float x) {
float f = (float) ((1f - Math.cos(x * Math.PI)) * .5f);
return a * (1f - f) + b * f;
}
//generates random noise value between -1.0 and 1.0
private float getNoise(float x, float y) {
if(y < 0) {
rand.setSeed((long) (332423 * (Math.sin(Math.cos(x) * x) + Math.cos(Math.sin(y) * y) + Math.tan(seed))));
}else{
rand.setSeed((long) (432423 * (Math.sin(x) + Math.cos(y) + Math.tan(seed))));
}
float n = (float)(((float)rand.nextInt(255) - (float)rand.nextInt(255))/255.0f);
return n;
}
그리고입니다. 코드를 실행하면 작동하지만 Perlin 노이즈는 발생하지 않습니다. 난 그냥이 얻을 :
이 blurY의의 더는 무엇보다 소음을 혼합. 옥타브를 더 추가하거나 지속성을 높여도 매우 비슷한 결과를 얻습니다. 코드를 작성하기위한 참조로 this 문서를 사용했습니다 (또한 this 하나). 그래서 누군가가 왜 이것이 작동하지 않는지에 대한 아이디어가 있다면, 제발 대답/대답하십시오. 감사!
더 나은 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. –
아니요. 나는 단지 응답을 기다릴 것이라고 생각합니다. 감사합니다 – CoderTheTyler
또는 respone에 대한 희망 : D – CoderTheTyler