QJuliaGPU -- Keenan Crane (kcrane@uiuc.edu, http://graphics.cs.uiuc.edu/~kcrane) 4/17/2004 This program ray traces the quaternion Julia set in a fragment shader using the sphere tracing method. The program draws a fullscreen quad where each fragment of the quad specifies a different ray. These rays are passed to the fragment shader which iteratively takes conservative steps along a ray as determined by a distance estimator for the set. The rays will either stop when close to an isosurface of the distance function (considered a hit), or leave the bounding sphere of the Julia set. If the ray is a hit, shading is performed by approximating the gradient of the distance function and using this as a surface normal. A more complete description of the sphere tracing method can be found in John Hart's paper, "Ray Tracing Deterministic 3-D Fractals" (http://graphics.cs.uiuc.edu/~jch/papers/rtqjs.pdf). Controls: left mouse button: rotate view middle mouse button: zoom in/out right mouse button: translate view space: toggle morph animation s: toggle shadows on/off r: reload shaders from disk i/I: increment/decrement 1st imaginary component of Julia set constant j/J: increment/decrement 2nd imaginary component of Julia set constant k/K: increment/decrement 3rd imaginary component of Julia set constant l/L: increment/decrement real component of Julia set constant -/+: change number of iterations used to test convergence of a point [/]: change precision of rendering By default the program will shift through a random constants for the Julia set within the cube [-1,1]^4. Increasing the number of iterations or the precision will increase the amount of detail seen in the rendering. The former more accurately determines whether a point is included in the set, whereas the latter intersects an isosurface of the distance function closer to the actual set. Both of these parameters run into precision or computation limits when set too high. ----------------------------------------------------------------------------------------------- The program requires the latest version of Cg: http://developer.nvidia.com/object/cg_toolkit.html and GLUT: http://www.xmission.com/~nate/glut.html as well as a graphics card which supports Shader Model 3.0 (Current cards with this feature include the NVIDIA 6800 and 7800 series and the ATI X1800 series). This program was tested on a pair of NVIDIA 7800 GTX cards in SLI. Please let me know if it does not work on your system by contacting kcrane@uiuc.edu. -----------------------------------------------------------------------------------------------