
Este proyecto fue realizado en colaboración con Cimex. Él también lo ha subido a su propio repositorio.
MiniRT es un ray-tracer 3D básico que utiliza la librería gráfica MLX42 (ventanas OpenGL) para renderizar una escena a partir de un archivo de escena que contiene datos de cámara, luces y objetos.
Funciona lanzando un rayo por cada píxel de la pantalla desde la cámara y calculando las intersecciones con objetos en el espacio 3D. Los objetos tienen normales de superficie que determinan cómo el rayo debe comportarse al rebotar hacia la fuente de luz.
La escena actualmente solo puede tener una luz puntual y todos los rayos trazan hacia ella. Las sombras se calculan de dos formas: shadow rays y oclusión ambiental. Los shadow rays se generan cuando el rayo impacta un objeto y no puede continuar, simulando cómo la sombra se proyecta sobre la superficie ocluida. La oclusión ambiental, por otro lado, es puramente basada en proximidad entre objetos muy cercanos y simula cómo la luz queda atrapada en espacios estrechos y se difunde en la oscuridad.
Ambos procesos de sombreado utilizan muestreo y dispersión pseudoaleatoria para simular la difusión. Cuantos más samples, menos ruido presentan las sombras, a cambio de mayor tiempo de cómputo.
Además, se han implementado características visuales adicionales, así como controles básicos en tiempo de ejecución. La memoria se gestiona mediante un sistema rudimentario de recolección de basura y existe un sistema robusto de logging y manejo de errores para mayor comodidad.
A pesar de ser un proyecto de 42, la última versión y todas las futuras se desviarán de la norma. Si deseas ver una versión totalmente compatible con la norma que entregamos, revisa el historial de commits.
Compilar con make. Limpiar con make clean o make fclean.
Ejecutar:
./miniRT "[archivo de escena / ruta al archivo de escena]"
El archivo debe tener extensión .rt y seguir un formato específico:
A), una cámara (C) y una luz puntual (L).pl), esferas (sp) y cilindros (cy).roughness y reflectivity opcionales (0 a 1).#.Ejemplo:
#AST POSITION ROTATION LUM/FOV RAD HGT COLOR ROUGH REFLECT
A 0.1 240,255,255
C -50,40.5,50 1,-0.25,-1 62
L -5,10,60 0.84 255,196,240
pl 0,-10,0 0,1,0 0,255,0 0 0.4
pl 100,0,0 -1,0,0 255,0,0 0 0
pl 0,0,-100 0,0,1 0,0,255 0 0
sp 0,0,0 20 255,0,255 0.8 0
sp -10,20,0 5 10,20,30 0 0.8
cy 10,40,-30 .5,1,.5 10 20 255,255,0
cy 50.0,7,-8 -1,0,1 20 15.5 0,255,255
sp -5,0,-21 16 255,255,255 0

Este proyecto ha sido uno de mis favoritos del core de 42. Planeo añadir: