Skip to content
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
cmake
images
libraries
objects
tests
.gitignore
.gitmodules
Angle.h
CMakeLists.txt
COPYING
Camera.cpp
Camera.h
Color.cpp
Color.h
Cube.cpp
Cube.h
CubeScene.cpp
CubeScene.h
FourSphereScene.cpp
FourSphereScene.h
IntersectionInfo.h
IntersectionLibrary.cpp
IntersectionLibrary.h
Light.cpp
Light.h
Material.cpp
Material.h
MaterialNode.cpp
MaterialNode.h
Node.cpp
Node.h
OBJModel.cpp
OBJModel.h
OBJScene.cpp
OBJScene.h
Plane.cpp
Plane.h
Poisson.cpp
Poisson.h
README
Ray.cpp
Ray.h
RayObject.cpp
RayObject.h
RaytraceRenderer.cpp
RaytraceRenderer.h
Raytracer.cpp
Raytracer.h
Renderer.cpp
Renderer.h
RotationNode.cpp
RotationNode.h
ScalingNode.cpp
ScalingNode.h
Scene.cpp
Scene.h
Sphere.cpp
Sphere.h
SpiralScene.cpp
SpiralScene.h
TransformNode.cpp
TransformNode.h
TranslationNode.cpp
TranslationNode.h
Triangle.cpp
Triangle.h
jaytrace.h
main.cpp

README

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
You can’t perform that action at this time.