diff --git a/Makefile b/Makefile index 94095e3..98db9c2 100644 --- a/Makefile +++ b/Makefile @@ -1,11 +1,18 @@ SRC_DIR = srcs/ SRCS= \ $(SRC_DIR)main.cpp \ - $(SRC_DIR)windowManager/WindowManager.cpp + $(SRC_DIR)windowManager/WindowManager.cpp \ + $(SRC_DIR)noise/perlin.cpp \ + $(SRC_DIR)math/Vector2.cpp \ + $(SRC_DIR)effects/cloud.cpp \ + $(SRC_DIR)effects/graph.cpp \ + $(SRC_DIR)effects/marble.cpp \ + $(SRC_DIR)effects/random.cpp \ + $(SRC_DIR)effects/wood.cpp \ MAKEFLAGS += --no-print-directory -NAME = window +NAME = perlin CC = c++ CFLAGS = -Wall -Wextra -Werror -g3 diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..ecf01a2 --- /dev/null +++ b/Readme.md @@ -0,0 +1,76 @@ +# perlin noise experimentations +This is a simple project to experiment with perlin noise. The project is written in c++ using X11 for the windowing system. +There are 5 different way to generate iamges using perlin noise built-in the project: + + - cloud effects using 2 superposed perlin noise + - graph representation of perlin noise in 2D + - marble effect + - wood effect + - one effect that I don't know how to describe + + ## usage: +```bash +# clone: +git clone https://github.com/lohhiiccc/Noise-generator +# compile: +make +# run: +./perlin +``` + +## how to use it: +- press space bar to change the effect +- press escape to quit the program +## dependencies: + - X11 + - g++ + - make + +## how it works: +The project is divided in 3 main parts: + - the noise generation + - cache pseudo-random gradient vectors based on seed + - cut the image in a grid of cells + - for each cell, generate a pseudo-random gradient vector + - for each pixel in the cell, calculate the distance to the 4 corners of the cell and interpolate the gradient vectors + - the image generation + - image are basically 2D array of uint32_t + - the x11 windowing system + - open a connection to the X server + - get a default root window + - define window properties + - create the main window + - event handling + - key press event + - quit the program with escape key + - change the effect with space bar + - close window event + + +## How to add effects: +- create effect function in effects folder +- follow the same pointer function signature as the other effects ```int (*name)(uint32_t *image, bool &needUpdate)``` +- add the effect in the ```main.cpp``` file by adding the function pointer in the vector of function pointers ```window.load_render();``` +- make again the project ! + +## some visual examples: +### cloud effect: +![cloud effect](https://github.com/lohhiiccc/Noise-generator/asset/cloud-perlin_noise.GIF) + +### graph representation: +![graph representation](https://github.com/lohhiiccc/Noise-generator/asset/graph-perlin_noise.GIF) + +### marble effect: +![marble effect](https://github.com/lohhiiccc/Noise-generator/asset/marble-perlin_noise.GIF) + +### wood effect: +![wood effect](https://github.com/lohhiiccc/Noise-generator/asset/wood-perlin_noise.GIF) + +### unknown effect: +![unknown effect](https://github.com/lohhiiccc/Noise-generator/asset/randoThings-perlin_noise.GIF) + + +# author: + - @lohhiiccc + +this is my first project with X11, i may have done some things wrong, feel free to tell me how to improve it. \ No newline at end of file diff --git a/asset/cloud-perlin_noise.GIF b/asset/cloud-perlin_noise.GIF new file mode 100644 index 0000000..2c398a9 Binary files /dev/null and b/asset/cloud-perlin_noise.GIF differ