diff options
| author | Ray <raysan5@gmail.com> | 2018-01-17 00:43:30 +0100 |
|---|---|---|
| committer | Ray <raysan5@gmail.com> | 2018-01-17 00:43:30 +0100 |
| commit | c8e97df233f50b0bc1cba07e014aca93c5c0f15c (patch) | |
| tree | 45bccf0c7ba6e5525a81bace41b005fb2caf7da4 /src | |
| parent | dd3b3dbadb4baf607ebc66ec74e95ef1ac478516 (diff) | |
| download | raylib-c8e97df233f50b0bc1cba07e014aca93c5c0f15c.tar.gz raylib-c8e97df233f50b0bc1cba07e014aca93c5c0f15c.zip | |
Reviewed function GenImagePerlinNoise()
Added support for noise image offset
Diffstat (limited to 'src')
| -rw-r--r-- | src/raylib.h | 2 | ||||
| -rw-r--r-- | src/textures.c | 21 |
2 files changed, 16 insertions, 7 deletions
diff --git a/src/raylib.h b/src/raylib.h index dc02370d..2bb04f77 100644 --- a/src/raylib.h +++ b/src/raylib.h @@ -908,7 +908,7 @@ RLAPI Image GenImageGradientH(int width, int height, Color left, Color right); RLAPI Image GenImageGradientRadial(int width, int height, float density, Color inner, Color outer); // Generate image: radial gradient RLAPI Image GenImageChecked(int width, int height, int checksX, int checksY, Color col1, Color col2); // Generate image: checked RLAPI Image GenImageWhiteNoise(int width, int height, float factor); // Generate image: white noise -RLAPI Image GenImagePerlinNoise(int width, int height, float scale); // Generate image: perlin noise +RLAPI Image GenImagePerlinNoise(int width, int height, int offsetX, int offsetY, float scale); // Generate image: perlin noise RLAPI Image GenImageCellular(int width, int height, int tileSize); // Generate image: cellular algorithm. Bigger tileSize means bigger cells // Texture2D configuration functions diff --git a/src/textures.c b/src/textures.c index 665e5447..e228b356 100644 --- a/src/textures.c +++ b/src/textures.c @@ -611,6 +611,8 @@ Image ImageCopy(Image image) newImage.height = image.height; newImage.mipmaps = image.mipmaps; newImage.format = image.format; + + //if (image.mipmaps > 1) ImageMipmaps(&newImage); } return newImage; @@ -823,6 +825,8 @@ void ImageFormat(Image *image, int newFormat) } free(pixels); + + //if (image->mipmaps > 1) ImageMipmaps(image); } else TraceLog(LOG_WARNING, "Image data format is compressed, can not be converted"); } @@ -1688,7 +1692,7 @@ Image GenImageWhiteNoise(int width, int height, float factor) } // Generate image: perlin noise -Image GenImagePerlinNoise(int width, int height, float scale) +Image GenImagePerlinNoise(int width, int height, int offsetX, int offsetY, float scale) { Color *pixels = (Color *)malloc(width*height*sizeof(Color)); @@ -1696,13 +1700,18 @@ Image GenImagePerlinNoise(int width, int height, float scale) { for (int x = 0; x < width; x++) { - float nx = (float)x*scale/(float)width; - float ny = (float)y*scale/(float)height; + float nx = (float)(x + offsetX)*scale/(float)width; + float ny = (float)(y + offsetY)*scale/(float)height; - // we need to translate the data from [-1; 1] to [0; 1] - float p = (stb_perlin_fbm_noise3(nx, ny, 1.0f, 2.0f, 0.5f, 6, 0, 0, 0) + 1.0f) / 2.0f; + // Typical values to start playing with: + // lacunarity = ~2.0 -- spacing between successive octaves (use exactly 2.0 for wrapping output) + // gain = 0.5 -- relative weighting applied to each successive octave + // octaves = 6 -- number of "octaves" of noise3() to sum + + // NOTE: We need to translate the data from [-1..1] to [0..1] + float p = (stb_perlin_fbm_noise3(nx, ny, 1.0f, 2.0f, 0.5f, 6, 0, 0, 0) + 1.0f)/2.0f; - int intensity = (int)(p * 255.0f); + int intensity = (int)(p*255.0f); pixels[y*width + x] = (Color){intensity, intensity, intensity, 255}; } } |
