42_MiniRT

Summary

This project is an introduction to the beautiful world of Raytracing.
Once completed we'll be able to render simple Computer-Generated-Images
and the objective is to not be afraid of implementing mathematical formulas again.

Todo

Implement a functionning RayTracing algorithm.
Take in account the eventuals optimizations : Fixed point number calculs, multi-threading, ...

Have a reader for the instructions. The instructions will be passed in parameter inside a .rt file.

Possible Instructions :
Ambient Lightning : A 0.2 255,255,255
Camera : C -50.0,0,20 0,0,1 70
Light : L -40.0,50.0,0.0 0.6 10,0,255

Sphere : sp 0.0,0.0,20.6 12.6 10,0,255
Plane : pl 0.0,0.0,-10.0 0.0,1.0,0.0 0,0,225
Cylinder : cy 50.0,0.0,20.6 0.0,0.0,1.0 14.2 21.42 10,0,255

There's at least three kind of geometry to display :
Planes
Spheres
Cylinders

The programm should be able to resize those geometries
Diameter for Spheres
Width and Height for Cylinders

Movement of the Objects should also be implemented
Translation for Objects, Light and Camera
Rotation for Objects (excluding Spheres) and Camera as Lights can't be rotated

Few things for Light management :
Ambient Lightning
Diffuse Lightning
Also, Objects should never be in the complete Dark.

Sources

https://web.cse.ohio-state.edu/~shen.94/681/Site/Slides_files/basic_algo.pdf
https://www.scratchapixel.com/lessons/3d-basic-rendering/introduction-to-ray-tracing/how-does-it-work
https://www.realtimerendering.com/raytracing/Ray%20Tracing%20in%20a%20Weekend.pdf
https://gabrielgambetta.com/computer-graphics-from-scratch/02-basic-raytracing.html
https://www.youtube.com/watch?v=A61S_2swwAc
http://three-eyed-games.com/2018/05/03/gpu-ray-tracing-in-unity-part-1/