Raytracer
I'm currently working on a raytracer. This project is meant to serve as a testbed for trying out new rendering ideas. Also, its just fun to to code :) Once I clean up the code I will likely open source it under LGPL.
Currently, the raytracer includes support for planes, triangles, spheres, and torii. Basic Phong shading is supported, along with reflection and refraction. Both 2D and 3D shaders can be written. A limited form of texture mapping is supported, and 2D textures can be loaded from .ppm files, and procedural 3D textures such as Perlin noise are implemented.
I'm currently implementing bounding volume hierarchies so that I can render meshes with some real speed. More information will be posted soon!
Applet for Visualizing Kruskal's Algorithm
Here's an applet used for visualizing Kruskal's minimum spanning tree algorithm. I wrote this for the VT AlgoViz project. Click on the image below to be taken to the applet on a dedicated page.
Coming Soon! - LGPL Sparse Linear Algebra Library
In the course of my fluid simulation research, I constantly needed libraries for linear algebra. For learning purposes, I wrote my own C++ sparse matrix library. (In a production setting, I would obviously use BLAS/LaPACK, and would not use these "homebrew" solvers.)
My library handles sparse matrices stored in CSR and CSC format. Vectors are stored as dense vectors. All classes are templated, so we can easily declare a matrix of floats, doubles, ints, or even complex numbers! My library supports the following features:- Matrix Vector multiply
- Determinants
- Matrix Transpose
- Matrix/vector operations with scalars
- Parallel SOR solver (OpenMP)
- Parallel Gauss–Seidel Solver (OpenMP)
- Jacobi Solver
- Conjugate Gradient
- In Progress - Various Preconditioners
- Planned - QR Eigenvalue algorithm
- Someday in the future - CUDA GPGPU Implementation?
Keyframeable Animation System
For my computer graphics class, I wrote a keyframe based animation system. I used OpenGL, C++, and GLUT. In this application, you could keyframe a characters joints, and then playback the animation. The system was fairly flexible, and you could alter the keyframe interpolation type, save the keyframes to disk, and do many other things.
For fun, I also implemented a very basic 3D particle system, also controllable by keyframes. Note that I can not release the code to this project becase it was done for a class.
CBQueue - Java Based Render Manager
CBQueue is a render manager I made back in high school. It lets you make a queue of your After Effects, Maya, Digital Fusion, and Combustion renders. It also has the ability to email you when your render is completed, shutdown the machine when finished, or copy all your renders to another location upon completion. Lastly, it is also able to launch multiple background instances of After Effects to speed up rendering. If you are intersted in using CBQueue, or want more information, feel free to email me.
