Ce projet est une introduction au monde du Raytracing.
Le programme a pour objectif de générer des images en utilisant le Raytracing. Ces images vont chacune représenter une scène, ces scènes qui seront elles-mêmes composées d'objets avec une position et un angle particulier à chacun et aussi un système de lumière unique à chaque objet.
Compilez les fichiers (avec make ou make bonus).
Une fois les fichiers compilés il vous suffit de lancer le programme comme tel:
./minirt <path_to_map/map_name.rt>
OU
./minirt_bonus <path_to_map/map_name.rt>
Une map doit forcément utiliser l'extension .rt.
- Lumière ambiante
- Caméra
- Spot de lumière
- Sphère
- Plan
- Cylindre
- Options
- Cone (bonus)
- Tx (bonus)
- Nm (bonus)
- Img (bonus)
- Exemple de map
- Exemple de map bonus
Une map peut contenir une lumière ambiante formater comme ceci:
A 0.2 255,255,255
- Identifiant: A
- Intensite lumineuse [0.0 et 1.0]: 0.2
- Couleur dans le format R,G,B [0 et 255]: 255,255,255
――――――――――――――――――――――――――――
Une map doit contenir une camera formater comme ceci:
C -50.0,0.0,20.0 0.0,0.0,1.0, 70
- Identifiant: C
- Coordonnées de la camera: -50.0,0.0,20.0
- Vecteur 3d d'orientation normé 1 [-1 et 1]: 0.0,0.0,1.0
――――――――――――――――――――――――――――
Une map peut contenir un spot de lumière (ou plusieurs dans les bonus) formater comme ceci:
L -40.0,50.0,0.0 0.6 10,0,255
- Identifiant: L
- Coordonnées du spot: -40.0,50.0,0.0
- Intensite lumineuse [0.0 et 1.0]: 0.6
- (uniquement dans le bonus) Couleur dans le format R,G,B [0 et 255]: 10,0,255
――――――――――――――――――――――――――――
Une map peut contenir plusieurs sphères formater comme ceci:
sp 0.0,0.0,20.6 12.6 10,0,255
- Identifiant: sp
- Coordonnées de la sphère: 0.0,0.0,20.6
- Diamètre de la sphère: 12.6
- Couleur dans le format R,G,B [0 et 255]: 10,0,255
――――――――――――――――――――――――――――
Une map peut contenir plusieurs plans formater comme ceci:
pl 0.0,0.0,-10.0 0.0,1.0,0.0 0,0,225
- Identifiant: pl
- Coordonnées du plan: 0.0,0.0,20.6
- Vecteur 3d d'orientation normé [-1 et 1]: 0.0,1.0,0.0
- Couleur dans le format R,G,B [0 et 255]: 0,0,255
――――――――――――――――――――――――――――
Une map peut contenir plusieurs cylindre formater comme ceci:
cy 50.0,0.0,20.6 0.0,0.0,1.0 14.2 21.42 10,0,255
- Identifiant: cy
- Coordonnées du cylindre: 50.0,0.0,20.6
- Vecteur 3d d'orientation normé [-1 et 1]: 0.0,0.0,1.0
- Diamètre du cylindre: 14.2
- Hauteur du cylindre: 21.42
- Couleur dans le format R,G,B [0 et 255]: 10,0,255
Le ratio entre le diamètre et la hauteur du cylindre doit être de 0.02 (autrement dit 1 de diamètre maximum pour 50 de hauteur).
――――――――――――――――――――――――――――
Une map peut contenir des options formater comme ceci:
Opt 0 1 2 0 1 2 0
- Identifiant: Opt
- Les 0, 1 et 2 sont équivalents à false, true et default.
- Ils représentent chacun une option disponible dans le programme que l'on peut manipuler avant de le lancer.
- Ils représentent dans l'ordre:
- Texture-mode (bonus seulement), ici 0.
- Image-mode (bonus seulement), ici 1.
- Checkboard-mode (bonus seulement), ici 2.
- Lumière spéculaire (bonus seulement), ici 0.
- Lumière diffuse, ici 1.
- Ombres, ici 2.
- Gizmo, ici 0.――――――――――――――――――――――――――――
Une map peut contenir plusieurs cones formater comme ceci:
co 50.0,0.0,20.6 0.0,0.0,1.0 14.2 21.42 10,0,255
- Identifiant: co
- Coordonnées du cone: 50.0,0.0,20.6
- Vecteur 3d d'orientation normé [-1 et 1]: 0.0,0.0,1.0
- Diamètre du cone: 14.2
- Hauteur du cone: 21.42
- Couleur dans le format R,G,B [0 et 255]: 10,0,255
――――――――――――――――――――――――――――
Une map peut contenir plusieurs "Tx" (texture) formater comme ceci:
Tx LAVA resources/texture/lava.xpm
- Identifiant: Tx
- Nom de la texture: LAVA
- Chemin vers la texture: resources/lava.xpm
Et pour utiliser la texture déclarer, il faut la mettre à la suite d'une déclaration d'objet.
Exemple: sp 0.0,0.0,20.6 12.6 10,0,255 LAVA NULL. La texture utiliser sera donc celle correspondant au nom 'LAVA'
――――――――――――――――――――――――――――
Une map peut contenir plusieurs "Nm" (normalmap) formater comme ceci:
Nm PILLOW resources/normalmap/pillow.xpm
- Identifiant: Nm
- Nom de la texture: PILLOW
- Chemin vers la texture: resources/normalmap/pillow.xpm
Et pour utiliser la normalmap déclarer, il faut la mettre à la suite d'une déclaration d'objet.
Exemple: sp 0.0,0.0,20.6 12.6 10,0,255 PILLOW NULL. La normalmap utiliser sera donc celle correspondant au nom 'PILLOW'
――――――――――――――――――――――――――――
Une map peut contenir plusieurs "Img" (image) formater comme ceci:
Img EARTH resources/image/earth_img.xpm
- Identifiant: Img
- Nom de l'image: EARTH
- Chemin vers l'image: resources/earth.xpm
Et pour utiliser l'image déclarer, il faut la mettre à la suite d'une déclaration d'objet.
Exemple: sp 0.0,0.0,20.6 12.6 10,0,255 NULL EARTH. L'image utiliser sera donc celle correspondant au nom 'EARTH'
――――――――――――――――――――――――――――
Voici donc un exemple de map qui reprend les exemples donnés au dessus:
A 0.2 255,255,255
C -50.0,0.0,20.0 0.0,0.0,1.0 70
L -40.0,50.0,0.0 0.6
sp 0.0,0.0,20.6 12.6 10,0,255
pl 0.0,0.0,-10.0 0.0,1.0,0.0 0,0,255
cy 50.0,0.0,20.6 0.0,0.0,1.0 14.2 21.42 10,0,255
La map est dejà "prête" dans maps/test.rt.
Si une erreur survient, le programme s'arretera et affichera: "Error\n"
――――――――――――――――――――――――――――
Voici donc un exemple de map qui reprend les exemples donnés au dessus:
A 0.2 255,255,255
C -50.0,0.0,20.0 0.0,0.0,1.0 70
L -40.0,50.0,0.0 0.6 10,0,255
Tx LAVA resources/texture/lava.xpm
Img EARTH resources/image/earth.xpm
sp 0.0,0.0,20.6 12.6 10,0,255 NULL EARTH
pl 0.0,0.0,-10.0 0.0,1.0,0.0 0,0,255 LAVA NULL
cy 50.0,0.0,20.6 0.0,0.0,1.0 14.2 21.42 10,0,255 LAVA EARTH
co 12.0,15.0,0.0 0.0,0.0,1.0 21.42 14.2 255,0,10 NULL NULL
La map est dejà "prête" dans maps/test_bonus.rt.
Si une erreur survient, le programme s'arretera et affichera: "Error\n"
- L'edit-mode: Il est par défaut sur ON et permet d'interagir avec les objets (bouger, tourner...). Lorsqu'il est sur OFF, vous pourrez bouger et tourner la caméra.
- Le light-mode: Il est par défaut sur OFF et permet de bouger les lumières (quand il est sur ON).
- L'anti-aliasing: Il est par défaut sur OFF et permet d'affiner les bords d'un objet (quand il est sur ON).
- Le menu d'informations: Vous donnera le status (ON/OFF) des différents modes et aussi des informations sur tous les objets (position, axe, couleur...).
- L'auto-low resolution: Il est par défaut sur ON et permet de réduire la résolution à chaque mouvement (par soucis de fluidité).
- Pour activer le "edit-mode", appuyez sur 'ESPACE'.
- Pour activer le "light-mode", appuyez sur 'L'.
- Pour changer de mode de rendu, appuyez sur 'NumPad 0'.
- Pour changer le lissage de l'antialising, appuyez sur 'NumPad 8/2'.
- Pour changer la resolution, appuyez sur 'PgUp ou PgDown'.
- Pour activer/désactiver l'auto-low resolution, appuyez sur 'E'.
- Pour réinitialiser la map, appuyez sur 'R'.
- Pour activer/désactiver les ombres, appuyez sur 'S'.
- Pour activer/désactiver la lumière diffuse, appuyez sur 'D'.
- Pour se déplacer dans la map, utilisez les flèches directionnelles.
- Pour déplacer un objet, utilisez le clic droit ou les flèches directionnelles lorsqu'il est sélectionné.
- Pour effectur une rotation sur un objet, utilisez le clic gauche.
- Pour changer la taille d'un objet (propriété union), utilisez le clic molette.
- Pour afficher le menu d'informations, appuyez sur 'I'.
- Pour scroll dans les menus, utilisez la molette.
- Pour afficher la minimap, appuyez sur 'M'.
- Pour afficher le gizmo (boussole), appuyez sur 'X'.
-
Pour activer/désactiver la lumière spéculaire, appuyez sur 'P'.
-
Pour activer/désactiver les textures, appuyez sur 'T'.
-
Pour activer/désactiver les images, appuyez sur 'G'.
-
Pour activer/désactiver le checkboard, appuyez sur 'C'.
-
Pour changer l'épaisseur de la texture, utilisez 'NumPad +/-'.
-
Pour activer/désactiver l'interpolation, utilisez 'N'.
Footnotes
-
La racine carré des axes x, y et z aux carrés du vecteur d'orientation doit être égal à 1 (à 0.01 près). Exemple: vecteur = 0.0,0.0,1.0 donc sqrt(0^2 + 0^2 + 1^2) = 1. ↩