Vous pouvez lire le Readme en anglais en cliquant ici
Minirt est un projet qui vous présente le monde fascinant de Raytracing. Avec ce projet, vous apprendrez à rendre les images générées par ordinateur à l'aide de techniques de base de rayons. Découvrez à quel point les images sont réalistes à partir de zéro!
Voici quelques images Rendu avec Minirt :
![]() | ![]() |
|---|---|
![]() | ![]() |
Ces images montrent ce que vous pouvez réaliser avec le projet et vous donne une idée de l'apparence des résultats finaux!
Minirt est un projet Raytracing qui vous permet:
Continuez à lire pour obtenir plus de détails sur la façon de configurer et d'utiliser Minirt , y compris comment définir la carte, les formules d'intersection et comment contrôler l'appareil photo et le clavier.
La carte définit les éléments qui apparaîtront dans votre image. Ici, nous vous montrons comment configurer chaque type d'élément:
Voici un exemple de la définition des éléments sur la carte:
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)
Caméra (c)
Lumière environnementale (a)
Light (L)
Plan (PL)
Sphère (SP)
Cylindre (CY)
La formule d'une sphère 3D est:
[(x - h) ^ 2 + (y - k) ^ 2 + (z - l) ^ 2 = r ^ 2]
Où:
Cette formule décrit tous les points ((x, y, z)) qui sont à une distance (r) du centre ((h, k, l)).
Image de la sphère:
Un plan 3D est représenté comme: [ax + par + cz + d = 0] où ((a, b, c)) est le vecteur normal du plan et (d) est la distance de l'origine.
Image du plan: 
Pour un cylindre:
Image du cylindre: cylindre
Pour rendre une image, nous dessinons un rayon de l'appareil photo via chaque pixel . Ensuite, nous vérifions si cet intersection éclair avec un objet dans la scène. Nous expliquons ici comment il est calculé:
Pour une sphère:

Pour un avion 3D:

Pour un cylindre:

Une fois que nous avons trouvé le point d'intersection, nous calculons la couleur finale du pixel avec ces étapes:
Couleur initiale:
Calculez la lumière:
Ombre:
Couleur finale:
Il en résulte une image plus réaliste, ajustant la luminosité et la couleur en fonction de la façon dont la lumière interagit avec les objets dans la scène.

Dans le projet, nous utilisons plusieurs structures de données pour gérer les informations de la scène et la configuration de la caméra. Ici, nous expliquons comment ils s'organisent:
t_info et t_data ) t_info : Cette structure conserve des informations sur la quantité de chaque type d'élément dans la scène:
ambient_light : quantité de lumières environnementales.camera : nombre de caméras.lights : quantité de lumières.planes : Montant de plans.spheres : Nombre de sphères.cylinders : Nombre de cylindres. t_data : Cette structure contient toutes les informations sur l'image à rendre:
width et height : Dimensions de l'image (larges et hautes).info : la structure t_info détaille la quantité de chaque type d'objet dans la scène.line : comptez les lignes traitées.lights , planes , spheres , cylinders : listes qui contiennent les objets sur la scène. Ces listes stockent respectivement les informations des lumières, des plans, des sphères et des cylindres.camera : informations sur la caméra.ambient_light : Informations sur la lumière environnementale.t_camera )La caméra est responsable de la définition de la perspective à partir de laquelle l'image est rendue. Sa structure comprend:
fov : Le champ de vision (FOV) de la caméra, qui détermine le montant de la caméra. Une plus grande valeur signifie un champ de vision plus large.center : un vecteur qui représente la position du centre de la caméra dans l'espace.euler : un vecteur qui contient les angles d'Euler, utilisé pour guider la caméra dans l'espace 3D.q : Un quaternion qui est utilisé pour représenter la rotation de la caméra 3D. Les quaternions sont utiles pour éviter les problèmes d'interpolation et de rotation 3D. Dans le projet, les touches du clavier permettent à la caméra d'être contrôlée et ajusté la vue de la scène. Voici une explication détaillée du fonctionnement de chaque clé et pourquoi nous utilisons certaines techniques pour la gestion des caméras.
W Keys, A, S, D: Ils sont utilisés pour déplacer la caméra dans différentes directions:
Ces clés modifient le centre de la caméra, qui est le point à partir duquel la caméra regarde la scène. Le déplacement du centre de la caméra modifie la position de la caméra dans l'espace sans le faire tourner.
Clé d'espace: élevez la caméra vers le haut.
Clé de changement de vitesse: abaissez la caméra vers le bas.
Clés de flèches ci-dessus (UP_K) et ci-dessous (down_k): ils ajustent l'inclinaison verticale de la caméra:
Clés de flèche gauche (Left_K) et droite (droite_k): ils ajustent la rotation horizontale de la caméra:
Ces clés modifient les angles de la caméra d'Euler , qui sont les angles qui déterminent comment la caméra est orientée dans l'espace. Les angles d'Euler sont utilisés pour ajuster l'inclinaison et la rotation de la caméra de manière simple.
Angles d'Euler
Ce projet est conçu pour être compatible avec Linux et MacOS , et des configurations spécifiques ont été implémentées pour s'assurer qu'elle fonctionne sans problèmes dans les deux systèmes d'exploitation.
Dans les projets qui gèrent les graphiques et les entrées de l'utilisateur, tels que les clés, il est courant que les codes associés à chaque clé varient selon le système d'exploitation. Pour gérer ces différences:
Par exemple:
Le projet utilise Minilibx (MLX) , qui est une bibliothèque lumineuse pour la programmation graphique 2D, spécialement conçue pour des environnements UNIX tels que Linux et MacOS. Cependant, en raison des différences entre les systèmes d'exploitation, il est nécessaire de configurer correctement les bibliothèques et les itinéraires de ceux-ci afin que le projet soit correctement compilé dans les deux systèmes.
Détection du système d'exploitation :
Configuration de la bibliothèque :
Compilation adaptative :
Cette approche garantit que le projet est non seulement portable entre différents systèmes d'exploitation, mais reste également optimisé et compatible avec les particularités de chaque environnement.
Pour illustrer le fonctionnement du projet dans la pratique, nous avons préparé une série de vidéos qui montrent différents aspects et fonctionnalités du programme en action. Ces vidéos couvrent:
Les vidéos sont x4 à une résolution de 800x400
Ces clips vous fourniront une vision claire de la façon d'utiliser le programme et de ce à quoi vous pouvez vous attendre en termes de performances et de visualisation.
Si vous souhaitez contribuer au projet:
ICI
ICI
◦ Email ffornes-: [email protected]
◦ Envoyer un e-mail à GMACIAS-: [email protected]