Perlin Noise 제너레이터가 제대로 작동하는지 확실하지 않습니다. 생성되는 노이즈는 온라인에서 볼 수있는 이미지와 크게 다릅니다.2D Perlin 노이즈가 이상하게 보입니다.
이내 코드는 기본적으로 :
/* Get the coord of the top-left gradient of the grid (y, x) falls in */
int j = floor(x);
int i = floor(y);
/* Get the distance (y, x) is from it */
double dx = x-j;
double dy = y-i;
/* Influence of (g)radient(i)(j) (starting at the top-left one) */
double g00 = dot(grad(hashes, hsize, grads, i, j), dy, dx);
double g01 = dot(grad(hashes, hsize, grads, i, j+1), dy, dx-1);
double g10 = dot(grad(hashes, hsize, grads, i+1, j), dy-1, dx);
double g11 = dot(grad(hashes, hsize, grads, i+1, j+1), dy-1, dx-1);
/* Interpolate the influences using the blending function */
/* Linear interpol the top 2 */
double lt = lerp(g00, g01, fade(dx));
/* Linear interpol the bottom 2 */
double lb = lerp(g10, g11, fade(dx));
/* Linear interpol lb lt, completing the bilienear interpol */
return lerp(lt, lb, fade(dy));
나는 보통 무엇을보고 반면
뭔가 같다 : 광산 (이 세 가지 다른 이미지가) 너무 균일 보인다
Complete code. 주로 this 자습서를 기반으로합니다. 나는 this script을 사용하여 csv 파일을 그립니다.
나는 기본적인 것들을 이해하지만, 보통 서로를 모순으로 삼는 몇 가지 "튜토리얼"을 읽은 후에는 읽을 수없는 "참조 구현"에 대해 약간의 의문이있다. 보간되는 (x, y)
점은 어떤 간격에 있어야합니까? 이 값을 이해하면 [0, GRID_SIZE-1]
이어야합니다 (예 : 256 임의의 값으로 미리 계산 된 테이블을 사용하는 경우 [0, 255]
). 그러나 내 코드는 에 (x, y)
이 매핑 될 때보기 좋은 이미지 만 표시하며 그리드 크기에 관계없이 [0, 255]
에 매핑하는 일부 구현을 온라인에서 볼 수 있습니다. 내가 테이블에서 그래디언트를 올바르게 선택하고 있는지 확신 할 수 없습니다.
페린 노이즈처럼 보입니다. M Oehm 대답을보십시오. – lisyarus