Skip to content

orangejulius/jaytrace

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Jaytrace: a personal ray tracer project

v0.1

Features
Intersections with spheres, triangles, cubes, and planes
OBJ file support using tinyobjloader
Composable 3D affine transformations using matrices
Lighting model with ambient, diffuse, and specular lighting from multiple lights
Shadows and reflections
Antialiasing with Poisson distribution based point selection

Philosophies
This project primarily serves two purposes: to experiment with interesting algorithms and to create
pretty pictures. I have thus far preferred improved encapsulation and readability of the code over
micro-optimizations, therefore the style of this project does not always feel like traditional
graphics code (especially in academia where many graphics algorithms originate), which favors long
functions close to the metal for speed.

On the other hand, I've tried to write code in a very testable way (like modern web development) and
add unit tests where possible, which is not common (I assume) in high-performance graphics code.
These tradeoffs are not easy, but it has been educational to try to balance the two.  Hopefully, as
I whittle down the list of features I'm exited to implement, I'll have time to optimize the code
further while maintaining readability and extensibility.

Dependencies
CMake 2.8+
Qt 4.6 (core, gui, and test libraries)
Eigen 3.x

Planned features
* kd-tree based intersection checking
* photon mapping or other global illumination systems
* full transparency (diffraction, total internal reflection)
* support for rendering multiple frames for an animation
* OpenCL or CUDA based computation
* network communication to enable multiple machines to work on one output image