Você pode ler o ReadMe em inglês clicando aqui
O Minirt é um projeto que apresenta o mundo fascinante do raytracing. Com este projeto, você aprenderá a renderizar imagens geradas por computador usando técnicas básicas de raytragem. Descubra como as imagens realistas são criadas do zero!
Aqui estão algumas imagens renderizadas com minirt :
![]() | ![]() |
|---|---|
![]() | ![]() |
Essas imagens mostram o que você pode alcançar com o projeto e dão uma idéia de como os resultados finais ficarão!
O Minirt é um projeto de raytracing que permite:
Continue lendo para obter mais detalhes sobre como configurar e usar o Minirt , incluindo como definir o mapa, fórmulas de interseção e como controlar a câmera e o teclado.
O mapa define os elementos que aparecerão à sua imagem. Aqui mostramos como configurar cada tipo de elemento:
Aqui está um exemplo de como os elementos são definidos no 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âmera (C)
Luz do ambiente (a)
Luz (L)
Plano (PL)
Esfera (SP)
Cilindro (CY)
A fórmula de uma esfera 3D é:
[(x - h)^2 + (y - k)^2 + (z - l)^2 = r^2]
Onde:
Esta fórmula descreve todos os pontos ((x, y, z)) que estão à distância (r) do centro ((h, k, l)).
Imagem da esfera:
Um plano 3D é representado como: [ax + por + cz + d = 0] onde ((a, b, c)) é o vetor normal do plano e (d) é a distância da origem.
Imagem do plano: 
Para um cilindro:
Imagem do cilindro: cilindro
Para renderizar uma imagem, desenhamos um raio da câmera através de cada pixel . Então verificamos se esse relâmpago de interseção com um objeto na cena. Aqui explicamos como é calculado:
Para uma esfera:

Para um avião 3D:

Para um cilindro:

Depois de encontrarmos o ponto de interseção, calculamos a cor final do pixel com estas etapas:
Cor inicial:
Calcule a luz:
Sombra:
Cor final:
Isso resulta em uma imagem mais realista, ajustando o brilho e a cor de acordo com a maneira como a luz interage com os objetos na cena.

No projeto, usamos várias estruturas de dados para lidar com as informações da cena e a configuração da câmera. Aqui explicamos como eles organizam:
t_info e t_data ) t_info : Esta estrutura mantém informações sobre a quantidade de cada tipo de elemento na cena:
ambient_light : quantidade de luzes ambientais.camera : Número de câmeras.lights : quantidade de luzes.planes : quantidade de planos.spheres : Número de esferas.cylinders : Número de cilindros. t_data : Esta estrutura contém todas as informações sobre a imagem a ser renderizada:
width e height : dimensões da imagem (larga e alta).info : a estrutura t_info detalha a quantidade de cada tipo de objeto na cena.line : conte as linhas processadas.lights , planes , spheres , cylinders : listas que contêm os objetos em cena. Essas listas armazenam as informações de luzes, planos, esferas e cilindros, respectivamente.camera : Informações sobre a câmera.ambient_light : Informações sobre luz ambiental.t_camera )A câmera é responsável por definir a perspectiva da qual a imagem é renderizada. Sua estrutura inclui:
fov : O campo de visão (FOV) da câmera, que determina quanto pode ser visto na câmera. Um valor maior significa um campo de visão mais amplo.center : um vetor que representa a posição do centro da câmera no espaço.euler : Um vetor que contém os ângulos de Euler, usado para guiar a câmera no espaço 3D.q : Um quaternion usado para representar a rotação da câmera 3D. Os quaternions são úteis para evitar problemas com interpolação e rotação 3D. No projeto, as teclas do teclado permitem que a câmera seja controlada e ajuste a visão da cena. Aqui está uma explicação detalhada de como cada chave funciona e por que usamos certas técnicas para o gerenciamento da câmera.
W Keys, A, S, D: Eles são usados para mover a câmera em diferentes direções:
Essas teclas modificam o centro da câmera, que é o ponto da qual a câmera está assistindo a cena. Mover o centro da câmera muda a posição da câmera no espaço sem girá -la.
Chave do espaço: eleve a câmera para cima.
Chave de mudança: Abaixe a câmera.
Teclas de seta acima (up_k) e abaixo (Down_K): elas ajustam a inclinação vertical da câmera:
Chaves de seta esquerda (esquerda_k) e direita (direita_k): elas ajustam a rotação horizontal da câmera:
Essas teclas modificam os ângulos da câmera de Euler , que são os ângulos que determinam como a câmera é orientada no espaço. Os ângulos de Euler são usados para ajustar a inclinação e a rotação da câmera de maneira simples.
Ângulos de Euler
Este projeto foi projetado para ser compatível com Linux e MacOS , e configurações específicas foram implementadas para garantir que funcione sem problemas em ambos os sistemas operacionais.
Nos projetos que lidam com gráficos e entradas do usuário, como chaves, é comum os códigos associados a cada chave para variar de acordo com o sistema operacional. Para lidar com essas diferenças:
Por exemplo:
O projeto usa o Minilibx (MLX) , que é uma biblioteca de luz para programação gráfica 2D, especialmente projetada para ambientes Unix, como Linux e MacOS. No entanto, devido às diferenças entre os sistemas operacionais, é necessário configurar adequadamente as bibliotecas e as rotas delas, para que o projeto seja compilado corretamente nos dois sistemas.
Detecção do sistema operacional :
Configuração da biblioteca :
Compilação adaptativa :
Essa abordagem garante que o projeto não seja apenas portátil entre diferentes sistemas operacionais, mas também permaneça otimizado e compatível com as particularidades de cada ambiente.
Para ilustrar como o projeto funciona na prática, preparamos uma série de vídeos que mostram diferentes aspectos e funcionalidades do programa em ação. Esses vídeos cobrem:
Os vídeos são x4 com uma resolução de 800x400
Esses clipes fornecerão uma visão clara de como usar o programa e o que você pode esperar em termos de desempenho e visualização.
Se você deseja contribuir para o projeto:
AQUI
AQUI
◦ Email Ffornes-: [email protected]
◦ Email gmacias-: [email protected]