Welcome to the Fractals Project! This project explores the fascinating world of fractals, mathematical sets that exhibit a repeating pattern at every scale. Fractals are not only beautiful but also have applications in various fields such as computer graphics, nature modeling, and more.
In this project, so far I've implemented only the Mandelbrot Set.
Here are some screenshots of the fractals generated by this project:
This project takes advantage of a few nifty features. They include:
- Multithreading: Fractal Rendering done using standard threads. Achieves a speedup of upto 500%.
- Color Palettes: Randomized color palettes are generated each time the program is run. You can also customize this by playing with the
ColorPalette
class. - Controls: Allows user to interact, zoom in/out, move around, and even take a snapshot.
- So far, we're generating a Mandelbrot Set with a variable number of Iterations and a randomized Color Palette.
- The user can zoom in and out of the fractal by clicking on the desired area. Zoom In =
Left Click
, Zoom Out =Right Click
. - You can increase/decrease the number of iterations by scrolling your mouse wheel
Up
orDown
. - You can move around the image canvas by pressing your
Up
,Down
,Left
orRight
keys. - Press
Space
to save the currently rendered fractal to thedata
folder as a.jpg
file. - To exit, press
Esc
.
To build and run the project, follow these steps:
-
Clone the repository:
git clone https://github.com/AlexJMercer/Fractal-Art.git cd Fractal-Art
-
Build from CMakeLists:
mkdir build cmake -S . -B build -G "Visual Studio 17 2022" cmake --build build --config Release
-
Run the application:
build\Release\Fractals.exe -i <iterations> -d <CPU/GPU> -w <width> -h <height>
Or, you can simply run the run.bat
file from the root folder.
We have exciting plans for the future of this project, including:
- Adding more fractal algorithms.
Stay tuned for updates and feel free to contribute!
Thank you for checking out the Fractals Project! If you have any questions or suggestions, please open an issue or submit a pull request.