mirror of
https://github.com/raysan5/raylib.git
synced 2025-10-03 08:28:30 +00:00
ADDED: GenImagePerlinNoise()
This commit is contained in:
@@ -70,12 +70,12 @@
|
||||
|
||||
#if defined(SUPPORT_MODULE_RTEXTURES)
|
||||
|
||||
#include "utils.h" // Required for: TRACELOG() and fopen() Android mapping
|
||||
#include "utils.h" // Required for: TRACELOG()
|
||||
#include "rlgl.h" // OpenGL abstraction layer to OpenGL 1.1, 3.3 or ES2
|
||||
|
||||
#include <stdlib.h> // Required for: malloc(), free()
|
||||
#include <string.h> // Required for: strlen() [Used in ImageTextEx()], strcmp() [Used in LoadImageFromMemory()]
|
||||
#include <math.h> // Required for: fabsf()
|
||||
#include <math.h> // Required for: fabsf() [Used in DrawTextureRec()]
|
||||
#include <stdio.h> // Required for: sprintf() [Used in ExportImageAsCode()]
|
||||
|
||||
// Support only desired texture formats on stb_image
|
||||
@@ -147,6 +147,11 @@
|
||||
#include "external/stb_image_write.h" // Required for: stbi_write_*()
|
||||
#endif
|
||||
|
||||
#if defined(SUPPORT_IMAGE_GENERATION)
|
||||
#define STB_PERLIN_IMPLEMENTATION
|
||||
#include "external/stb_perlin.h" // Required for: stb_perlin_fbm_noise3
|
||||
#endif
|
||||
|
||||
#if defined(SUPPORT_IMAGE_MANIPULATION)
|
||||
#define STBIR_MALLOC(size,c) ((void)(c), RL_MALLOC(size))
|
||||
#define STBIR_FREE(ptr,c) ((void)(c), RL_FREE(ptr))
|
||||
@@ -760,6 +765,42 @@ Image GenImageWhiteNoise(int width, int height, float factor)
|
||||
return image;
|
||||
}
|
||||
|
||||
// Generate image: perlin noise
|
||||
Image GenImagePerlinNoise(int width, int height, int offsetX, int offsetY, float scale)
|
||||
{
|
||||
Color *pixels = (Color *)RL_MALLOC(width*height*sizeof(Color));
|
||||
|
||||
for (int y = 0; y < height; y++)
|
||||
{
|
||||
for (int x = 0; x < width; x++)
|
||||
{
|
||||
float nx = (float)(x + offsetX)*scale/(float)width;
|
||||
float ny = (float)(y + offsetY)*scale/(float)height;
|
||||
|
||||
// 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) + 1.0f)/2.0f;
|
||||
|
||||
int intensity = (int)(p*255.0f);
|
||||
pixels[y*width + x] = (Color){ intensity, intensity, intensity, 255 };
|
||||
}
|
||||
}
|
||||
|
||||
Image image = {
|
||||
.data = pixels,
|
||||
.width = width,
|
||||
.height = height,
|
||||
.format = PIXELFORMAT_UNCOMPRESSED_R8G8B8A8,
|
||||
.mipmaps = 1
|
||||
};
|
||||
|
||||
return image;
|
||||
}
|
||||
|
||||
// Generate image: cellular algorithm. Bigger tileSize means bigger cells
|
||||
Image GenImageCellular(int width, int height, int tileSize)
|
||||
{
|
||||
@@ -3181,19 +3222,19 @@ void SetTextureWrap(Texture2D texture, int wrap)
|
||||
//------------------------------------------------------------------------------------
|
||||
// Texture drawing functions
|
||||
//------------------------------------------------------------------------------------
|
||||
// Draw a Texture2D
|
||||
// Draw a texture
|
||||
void DrawTexture(Texture2D texture, int posX, int posY, Color tint)
|
||||
{
|
||||
DrawTextureEx(texture, (Vector2){ (float)posX, (float)posY }, 0.0f, 1.0f, tint);
|
||||
}
|
||||
|
||||
// Draw a Texture2D with position defined as Vector2
|
||||
// Draw a texture with position defined as Vector2
|
||||
void DrawTextureV(Texture2D texture, Vector2 position, Color tint)
|
||||
{
|
||||
DrawTextureEx(texture, position, 0, 1.0f, tint);
|
||||
}
|
||||
|
||||
// Draw a Texture2D with extended parameters
|
||||
// Draw a texture with extended parameters
|
||||
void DrawTextureEx(Texture2D texture, Vector2 position, float rotation, float scale, Color tint)
|
||||
{
|
||||
Rectangle source = { 0.0f, 0.0f, (float)texture.width, (float)texture.height };
|
||||
|
Reference in New Issue
Block a user