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.
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.
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/