Welcome to my C-coded, CPU-based raytracer !
If I find the time later, I would like to develop a C++ raytracer with refraction/reflection, soft shadows, anti-aliasing, focal blur, multithread support, triangles, CSG and groups.
This project really made me realize how useful object-oriented programming can be.
C can be frustrating sometimes haha 😤
This program is compatible with Mac and Linux-based systems.
Just clone the repo and run the installer.sh script:
git clone https://github.com/leonardkrief/miniRT
cd miniRT
sh installer.sh
The executable miniRT will be generated and you will be able to load a scene in it with ./miniRT path_to_scene
For example
./miniRT scenes/ra.rt
Once the scene is loaded, you can move inside it !
Here are the commands for french keyboards:
- To translate the camera, use the
ZQSDkeys +WXkeys for vertical translations. - To rotate the camera, use the arrows +
/+keys for axial view rotations. - Press
ESCkey or click the cross to quit.
If you don't have a french keyboard just enter random input, you will find
The window size is modifyable in the include/graphics.h file, lines 33-34:
# define WINDOW_HEIGHT xxx
# define WINDOW_WIDTH xxx
A scene is a file containing all of the objects that will load into your raytracer. It's extension MUST BE .rt
In that file will be mentionned 2 types of objects: special objects, and shapes objects.
3 special objects: Ambient Lightning, Camera, Lights
3 shapes objects: Spheres, Plans, Cylinders
Below is a detailed manual for every objects you can mention in your scenes
Camera (must be unique)
``` C xPos,yPos,zPos xDir,yDir,zDir FOV ``` `Pos` is the camera position point.Dir is the camera orientation vector.
FOV is the field of view.
Ambient light (must be unique)
A Ratio R,G,B
Ratio is the intensity of the light, in range [0;1].
R,G,B is the color of the ambient light, each component is in range [0;255].
Lights (up to 10)
``` L xPos,yPos,zPos Ratio R,G,B ```Pos is the light position point.
Ratio is the intensity of the light, in range [0;1].
R,G,B is the color of the light, each component is in range [0;255].
Sphere :
sp xPos,yPos,zPos Radius R,G,B
Pos is a point describing the sphere position.
R,G,B is the color of the sphere, each component is between range [0;255].
Radius is the radius of the sphere.
Plane:
pl xPos,yPos,zPos xDir,yDir,zDir R,G,B
Pos is a point describing the plane position.
Dir is a vector orienting the plane.
R,G,B is the color of the plane, each component is between range [0;255].
Cylinder :
cy xPos,yPos,zPos xDir,yDir,zDir Lenght Diameter R,G,B
Pos is a point describing the cylinder position.
Dir is a vector orienting the cylinder.
R,G,B is the color of the cylinder, each component is between range [0;255].
Lenght and Diameter cannot be negative.
My ray-tracer supports several patterns but they are not handled in the parsing of the scenes. I will try to add that later :)


