You can read the README in English by clicking HERE
miniRT es un proyecto que te introduce al fascinante mundo del raytracing. Con este proyecto, aprenderás a renderizar imágenes generadas por ordenador utilizando técnicas básicas de raytracing. ¡Descubre cómo se crean imágenes realistas desde cero!
Aquí tienes algunas imágenes renderizadas con miniRT:
![]() |
![]() |
|---|---|
![]() |
![]() |
¡Estas imágenes muestran lo que puedes lograr con el proyecto y te dan una idea de cómo se verán los resultados finales!
miniRT es un proyecto de raytracing que te permite:
Continúa leyendo para obtener más detalles sobre cómo configurar y utilizar miniRT, incluyendo cómo definir el mapa, las fórmulas de intersección, y cómo controlar la cámara y el teclado.
El mapa define los elementos que aparecerán en tu imagen. Aquí te mostramos cómo configurar cada tipo de elemento:
Aquí tienes un ejemplo de cómo se definen los elementos en el mapa:
A 0.3 255,255,255 (Luz de ambiente: intensidad, color)
C 0,1,-10 0,0,1 70 (Cámara: posición, vector de dirección, FOV)
L 0,10,-10 0.7 255,255,255 (Luz: posición, intensidad, color)
pl 0,0,0 0,1,0 100,100,100 (Plano: posición, vector normal, color)
sp 0,0,0 5 255,0,10 (Esfera: posición, radio, color)
cy 4,0,0 1,1,0 4 6 10,0,255 (Cilindro: posición, radio, altura, color)
Cámara (C)
Luz de Ambiente (A)
Luz (L)
Plano (pl)
Esfera (sp)
Cilindro (cy)
La fórmula de una esfera en 3D es:
[ (x - h)^2 + (y - k)^2 + (z - l)^2 = r^2 ]
Donde:
Esta fórmula describe todos los puntos ( (x, y, z) ) que están a una distancia ( r ) del centro ( (h, k, l) ).
Imagen del Esfera:
Un plano en 3D se representa como: [ ax + by + cz + d = 0 ] Donde ( (a, b, c) ) es el vector normal al plano y ( d ) es la distancia desde el origen.
Imagen del Plano: 
Para un cilindro:
Imagen del Cilindro: Cilindro
Para renderizar una imagen, trazamos un rayo desde la cámara a través de cada píxel. Luego comprobamos si ese rayo interseca con algún objeto en la escena. Aquí te explicamos cómo se calcula:
Para una Esfera:

Para un plano en 3D:

Para un cilindro:

Una vez que encontramos el punto de intersección, calculamos el color final del píxel con estos pasos:
Color Inicial:
Calcular la Luz:
Sombra:
Color Final:
Esto da lugar a una imagen más realista, ajustando el brillo y el color según cómo interactúa la luz con los objetos en la escena.

En el proyecto, usamos varias estructuras de datos para manejar la información de la escena y la configuración de la cámara. Aquí te explicamos cómo se organizan:
t_info y t_data)t_info: Esta estructura guarda información sobre la cantidad de cada tipo de elemento en la escena:
ambient_light: Cantidad de luces ambientales.camera: Cantidad de cámaras.lights: Cantidad de luces.planes: Cantidad de planos.spheres: Cantidad de esferas.cylinders: Cantidad de cilindros.t_data: Esta estructura contiene toda la información sobre la imagen que se va a renderizar:
width y height: Dimensiones de la imagen (ancho y alto).info: Estructura t_info que detalla la cantidad de cada tipo de objeto en la escena.line: Cuenta las líneas procesadas.lights, planes, spheres, cylinders: Listas que contienen los objetos en la escena. Estas listas almacenan la información de luces, planos, esferas y cilindros, respectivamente.camera: Información sobre la cámara.ambient_light: Información sobre la luz ambiental.t_camera)La cámara se encarga de definir la perspectiva desde la que se renderiza la imagen. Su estructura incluye:
fov: El campo de visión (FOV) de la cámara, que determina cuánto se puede ver desde la cámara. Un valor mayor significa un campo de visión más amplio.center: Un vector que representa la posición del centro de la cámara en el espacio.euler: Un vector que contiene los ángulos de Euler, utilizados para orientar la cámara en el espacio 3D.q: Un cuaternión que se utiliza para representar la rotación de la cámara en 3D. Los cuaterniones son útiles para evitar problemas con la interpolación y la rotación en 3D.En el proyecto, las teclas del teclado permiten controlar la cámara y ajustar la vista de la escena. Aquí está una explicación detallada de cómo funciona cada tecla y por qué utilizamos ciertas técnicas para el manejo de la cámara.
Teclas W, A, S, D: Se utilizan para mover la cámara en diferentes direcciones:
Estas teclas modifican el centro de la cámara, que es el punto desde el que la cámara está viendo la escena. Mover el centro de la cámara cambia la posición de la cámara en el espacio sin rotarla.
Tecla SPACE: Eleva la cámara hacia arriba.
Tecla SHIFT: Baja la cámara hacia abajo.
Teclas de flecha arriba (UP_K) y abajo (DOWN_K): Ajustan la inclinación vertical de la cámara:
Teclas de flecha izquierda (LEFT_K) y derecha (RIGHT_K): Ajustan la rotación horizontal de la cámara:
Estas teclas modifican los ángulos de Euler de la cámara, que son los ángulos que determinan cómo está orientada la cámara en el espacio. Los ángulos de Euler se utilizan para ajustar la inclinación y la rotación de la cámara de manera simple.
Ángulos de Euler
Este proyecto está diseñado para ser compatible tanto con Linux como con MacOS, y se han implementado configuraciones específicas para asegurar que funcione sin problemas en ambos sistemas operativos.
En los proyectos que manejan gráficos y entradas del usuario, como teclas, es común que los códigos asociados a cada tecla varíen según el sistema operativo. Para manejar estas diferencias:
Por ejemplo:
El proyecto utiliza MiniLibX (MLX), que es una biblioteca ligera para la programación de gráficos en 2D, especialmente diseñada para entornos Unix como Linux y MacOS. Sin embargo, debido a las diferencias entre los sistemas operativos, es necesario configurar adecuadamente las bibliotecas y las rutas de estas para que el proyecto se compile correctamente en ambos sistemas.
Detección del Sistema Operativo:
Configuración de Bibliotecas:
Compilación Adaptativa:
Este enfoque asegura que el proyecto no solo sea portable entre diferentes sistemas operativos, sino que también se mantenga optimizado y compatible con las particularidades de cada entorno.
Para ilustrar cómo funciona el proyecto en la práctica, hemos preparado una serie de videos que muestran diferentes aspectos y funcionalidades del programa en acción. Estos videos cubren:
Los videos estan x4 a una resolución de 800x400
Estos clips te proporcionarán una visión clara de cómo utilizar el programa y lo que puedes esperar en términos de rendimiento y visualización.
Si deseas contribuir al proyecto:
AQUÍ
AQUÍ
◦ Email ffornes-: [email protected]
◦ Email gmacias-: [email protected]