Kaolin Fire with GUD Issues 0 through 5

kaolin fire presents :: software :: Fractal Roamer


software :: Fractal Roamer v. 2a_3


Fractal Roamer

Who needs fish, when you have all of eternity to explore?

For the impatient (it's been forever since I updated this page), the following should be better than what's below: For windows (2a-4, sorta), and for DirectDraw for windows, also 2a-4, kinda. The directx version happens to be compiled for 1600x1200 resolution instead of the otherwise standard 320x240. I need to develop a gui or at least commandline options around this, which means the libraries need to be redeveloped, which which which... EEP.

Binaries:Windows (MFC) (DirectX)
Platform source:gnome | SVGA (missing) | PNG (v1) | Windows (MFC (missing)) (DirectX)
"library" src for all platforms

MFC stands for Microsoft Foundation Classes, and basically means its a normal Windows executable, as opposed to funky DirectX stuff :)
Commands
[space] or [right click]toggle autopilot
ftoggle fractal type [mandelbrot or julia]
ddisplay coordinates
ccolor cycle / change palette
sstyle change 1
h/[left], j/[down], k/[up], l/[right]with autopilot off, move up/down/left/right through the set
z/xwith autopilot off, zoom in/out
[left click]with autopilot off, center image on point

About:

    FractRoam is an attempt to learn several different GUIs on several different platforms, as well as a way to learn more about fractals and as my first real attempt at an eye-candy program.

    So far, I've written versions for linux SVGA, linux (mostly) gtk+ [gnome], windows MFC, DirectX. I've also written a version for linux that dumps each frame as a .png file (PNGfractroam). [BTW, officially, .png is pronounced "ping"]. I plan to write a .mng version ("ming") soon -- that's motion png. Also in the mental works is a version that processes over several computers at once so as to get a higher quality image and a better frame rate. :) [The advantage to dumping to .png or .mng is that realtime is no longer an issue]

    PNGfractroam is still in its infancy -- I need to come up with commandline options for it so that its progress can be a LITTLE bit better defined. [which color style, julia or mandel, and maybe window size and all that]

    I use MetroWerks CodeWarrior for Windows. The DirectX and Win sources compile on it, when you've got all the right libraries set up. I expect the work on other windows c compilers, but... I dunno. Windows is windows, though, so you can just grab the binaries if you like. :)

    For linux, of course, I use gcc. The project doesn't really seem to warrant configure, so I've just tossed in simple makefiles for each.

    In order to compile anything, you need to get the source code for the proper platform AS WELL AS the latest "library" -- that's fractroam.h and fractroam.c.

    After making my first "video" from the frames of running PNGfractroam and playing around with it for about 8 hours, I think I've figured out how to make the roaming experience more immediately interesting more often than not. When viewing the zooming around in realtime, every time being different, it was less of an issue... but for something you might see more than once, it's really important. And should make the realtime stuff even cooler. :) That will likely be the jump to 2a_4.

Less informative "About":

    Everyone and their dog has to write a fractal program, and this one is mine, I suppose. A friend of mine showed me how to compute the mandelbrot set, and "poof" -- I sat down, and in seventeen hours (with glade) had learned enough of gtk+/gnome to have a working prototype. It had no user interface, but it was very hypnotic -- the trick was I'd made it zoom around very sniftily.

    Thus was born gnofractroam1a, 1b, and 1c -- all tiny updates while I figured this or that out. Then I ran into the issue than 9/10 people I wanted to show it to used windows, and... it was a bit of a mess to port. So...

    Thus was born fractroam2 -- I separated out the UI from the computation, modularized stuff, and set about trying to port it to this that and the other. So far, I've got it written with gtk+ again, much MUCH more cleanly, and the UI is pretty cool. -- You can now pause the auto-zoom, print out the coordinates that you're at (so as to render them prettier in a nicer fractal engine), and you can move around a little bit while the auto-zoom is paused (up, down, left, right, in, out...)

    Versioning is a little iffy, I think I'd like to version the "library" (which it effectively is, but not actually...) and the "programs" separately. Not sure how that will work out. For now I'm calling the current port gnofractroam-2a, and the library version 0.2. When things are more definite, I'll probably start following the recommended gnome numbering system. First I need to see how things work with actually trying to port this to windows.... And I'd like to do an Xlib version but I don't understand how insane I have to be about color depths and all that business. I probably will do a *nix SVGA version, but it won't look so hot with my current knowledge. Then it would be good to try a Mac version. ? :)

    I'd really like to put together a reference library of some sorts of how simple graphics and UI work with most libraries, and this seems the way to start doing it. =)

Todo:

    I suppose I need to make a README with versioning notes and stuff. started adding that stuff in winfractroam.c, but most folks don't want to have to dig through that. La. The 2a_1 should be more stable than 2a, and supports resizing of the window, though it keeps its same resolution -- speed issues. I need to figure out how to avoid calculating every dot in a pool. 2a_2 added a couple more color palettes, changed a couple color palettes, removed a hiccup from moving around when not in autopilot.

    REALLY REALLY need to make a readme with notes and stuff. And I really need to pick a sane versioning format. It's hard to decide how to package everything and how to version everything and all that. :(

Old Versions/code:

  • WinFractRoam 2a_2 (bin) -- fixed a crash bug and "width" display
  • WinFractRoam 2a_1 (bin src) [Codewarrior Pro 4]
  • WinFractRoam 2a (bin src) [Codewarrior Pro 4]

  • SVGAfractroam-2a_2 (zip)

  • gnofractroam 2a_2 (zip)
  • gnofractroam 2a (tgz)
  • gnofractroam-xx.tgz (1a 1b 1c)
  • fractroam-xx.tgz (1a)

List of images found, so far...

I know this is nothing; I plan to make a library where everyone can post their thingsm and such
starfish:
x: 0.334477 → 0.335843; y: 0.426521 → 0.427614
sgt. pepper portrait:
x: -0.206042 → -0.203210; y: -0.649937 → -0.647671
curled horns:
x: -0.461382 → -0.461221; y: 0.569852 → 0.569981
eye:
x: 0.379142 → 0.379791; y: 0.239058 → 0.239577
spiralbrot:
x: -1.280884 → -1.226485; y: 0.358847 → 0.402366
(pull out a little bit & label):
x: -0.747893 → -0.747825; y: -0.081626 → -0.081680
wave:
x: -0.886264 → -0.868970; y: -0.262249 → -0.248414
spiral galaxy:
x: -0.340604 → -0.338431; y: -0.627327 → -0.625588
eyeball:
x: -0.317093 → -0.316867; y: 0.626530 → 0.626711
julia set (mandel relative) at:
x: -0.182443 → -0.181244; y: -0.662695 → -0.661736

footnotes:

  1. (the alternate style is from when I forgot the definition of the absolute value of a complex number -- it looked neat, so I kept it as an option)