Skip to content

rsterin/miniRT

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

635 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sommaire

  1. Resume et objectifs
  2. Utilisation
  3. Formatage des maps
  4. Features
  5. Touches

1. Resume et objectifs

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.


2. Utilisation

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>

3. Formatage des maps

Une map doit forcément utiliser l'extension .rt.

Sommaire


Lumière ambiante

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

――――――――――――――――――――――――――――

Caméra

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

――――――――――――――――――――――――――――

Spot de lumière

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

――――――――――――――――――――――――――――

Sphère

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

――――――――――――――――――――――――――――

Plan

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

――――――――――――――――――――――――――――

Cylindre

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).

――――――――――――――――――――――――――――

Options

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.

――――――――――――――――――――――――――――

Cone (bonus)

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

――――――――――――――――――――――――――――

Tx (bonus)

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'

――――――――――――――――――――――――――――

Nm (bonus)

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'

――――――――――――――――――――――――――――

Img (bonus)

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'


――――――――――――――――――――――――――――

Exemple de map

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"

――――――――――――――――――――――――――――

Exemple de map bonus

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"

4. Features

  • 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é).

5. Touches

Mandatory

  • 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'.

Bonus

  • 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'.


Pour afficher cette aide une fois le programme ouvert, appuyez sur 'H'


Footnotes

  1. 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. ↩

About

💡 Raytracer in C supporting spheres, planes, cylinders, and Phong lighting

Resources

Stars

Watchers

Forks

Contributors