I was in the mood a few nights ago to do something silly and fun, so I updated the Julia Fractals project to create a 3D screen saver out of it :-). Your view is inside a rotating 3D cube with a different Julia Fractal rendering to each face. The fractals all zoom in and out of their own accord at different speeds.
The version number is now at 0.61 [source]. This update only modified the Pixel Shader portion of the project and not the software rendered one. The Julia Fractal Pixel Shader can now run in “Screen Saver” or “Normal” mode depending on command line parameters or the configuration file.
The updates are as follows:
Screen saver mode added:
- An optional configuration file is provided to overwrite the default screen saver mode settings.
The screen saver can be run in both Full Screen and Windowed modes which have some differences:
- Full Screen Mode: Any mouse or keyboard activity will end the program.
- Windowed Mode: The titlebar displays current configuration settings, which can be changed realtime through shortcut keys.
- A special “shrink constant” tells the program the pixel dimensions of the texture to render the fractal into when compared against the size of the actual target window. Changing this value affects the quality and render speed of the fractals rendered to each cube face.
- Each of the 6 different faces (5 different fractals) all zoom in and out continuously on the same point (for that fractal). I didn’t feel like developing the code to choose good random points to zoom in on for aesthetics (and shift them real time) because I basically accomplished what I wanted with this and didn’t want to spend the extra time fine tuning that functionality.
- The mode set through the configuration file can be overwritten by passing a command line parameter. The first argument can be either “ScreenSaver” or “Normal” to overwrite the mode setting.
- Added the ability to render any Julia fractal through the pixel shader instead of just the Mandelbrot Fractal.
- The source code has been split up into multiple files for better organization (Fractal rendering engine interfaced with D3D, “Normal Run” mode, the “Screen Saver” mode, Settings, and the Loader).
- Fractal information is now held in a structure instead of global variables so multiple fractals can be rendered.
- Added a maximum zoom amount variable to make sure floating point underrun does not occur.
- The pixel shader is now held in the executable as a resource instead of as an extra file.
I also heavily edited the project description/notes during this update because I had noticed that I had forgotten to do that for the last few updates and they were very outdated.