sinclairtarget / simple-raytrace

A basic ray tracing implementation with shading, shadows, and reflections

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

simple-raytrace

A basic ray tracing implementation with shading, shadows, and reflections, based on the raytracer outlined in Chapter 4 of Fundamentals of Computer Graphics.

Runs on Mac OS only for now.

Example Renderings

Twin Spheres

Floating Cube

The Great Pyramid

Compiling

Rake is used to build the program. Assuming you have Ruby and Rake installed:

[sinclairtarget 17:04 simple-raytrace]$ rake
mkdir -p build/SimpleRaytrace.app/Contents
cp Info.plist build/SimpleRaytrace.app/Contents/Info.plist
clang -fobjc-arc -c src/cocoa/ApplicationDelegate.m -o src/cocoa/ApplicationDelegate.o
clang -fobjc-arc -c src/cocoa/BitmapContentView.m -o src/cocoa/BitmapContentView.o
clang -fobjc-arc -c src/cocoa/BitmapWindow.m -o src/cocoa/BitmapWindow.o
clang -fobjc-arc -c src/cocoa/platform.m -o src/cocoa/platform.o
clang -c src/camera.c -o src/camera.o
clang -c src/color.c -o src/color.o
clang -c src/main.c -o src/main.o
clang -c src/random_sort.c -o src/random_sort.o
clang -c src/ray.c -o src/ray.o
clang -c src/ray_hit.c -o src/ray_hit.o
clang -c src/scene.c -o src/scene.o
clang -c src/shading.c -o src/shading.o
clang -c src/sphere.c -o src/sphere.o
clang -c src/triangle.c -o src/triangle.o
clang -c src/vec3.c -o src/vec3.o
mkdir -p build/SimpleRaytrace.app/Contents/MacOS
clang -framework Cocoa -o build/SimpleRaytrace.app/Contents/MacOS/SimpleRaytrace src/cocoa/ApplicationDelegate.o src/cocoa/BitmapContentView.o src/cocoa/BitmapWindow.o src/cocoa/platform.o src/camera.o src/color.o src/main.o src/random_sort.o src/ray.o src/ray_hit.o src/scene.o src/shading.o src/sphere.o src/triangle.o src/vec3.o
mkdir -p build/SimpleRaytrace.app/Contents/Resources
cp assets/skyrim.png assets/skyrim_man.png build/SimpleRaytrace.app/Contents/Resources

You can then run the program either by double-clicking on the created app or by using the run.sh script provided.

Changing the Scene

The scene and the objects in it are hard-coded. See BuildScene() in src/main.c.

About

A basic ray tracing implementation with shading, shadows, and reflections


Languages

Language:C 71.4%Language:Objective-C 17.8%Language:Ruby 5.6%Language:C++ 5.0%Language:Shell 0.2%