This is a raytracer built in the discipline DIM0451 - COMPUTAÇÃO GRÁFICA I (Computer Graphics I) in the Universidade Federal do Rio Grande do Norte.
The original version was written in C++ in the discipline, and later refactored in rust because I didn't like the xml format and the parser implemented in cpp. :P
Render triangles, spheres, planes, 3D meshes (.obj), cannonball piramids.
Do some transformations with the objects, like translation, rotation and scaling.
Render visually appealling images using these objects, lights, shadows and reflections using the Blinn-phong algorithm for light rendering.
Render fun stuff with the normal-map integrator and the xray integrator.
!TODO: Explain the json structure expected.
This is a simple scene, with 3 spheres with three colors and a plane to show the shadows.
Its simple but shows the reflections pretty nicely, between the floor and the balls.
In the raytracer you can define the color of the lights as you wish, in this case there is a red and a blue light.
This was cool because it shows the intersection of the red and blue and its pretty nice. Also there is an object in the raytracer called cannonball, is this piramid like structure formed by stacking spheres.
In this scene is possible to see the rotation in the right-most cannoball.
This is a 3D model rendered inside the raytracer, this triangle implementation isn't the optimal one, and to render such a high poly object
took about 20 minutes with two lights. Also notice that the raytracer can read .obj and .mtl files, but I didnt implement texture mapping for the raytracer...
So it resulted in a strange phone, but is still cool to render .obj like that.


