Dans le cadre de ce travail, un moteur de lancer de rayon partiellement programm´e vous sera fourni.
Toutes les composantes p´eriph´eriques du moteur qui ne sont pas directement reli´ees au lancer de rayon ont
d´ej`a ´et´e programm´ees pour vous. Votre tˆache, tout au long de la session, consistera `a impl´ementer certaines
m´ethodes ou fonctions laiss´ees vides touchant au processus du lancer de rayon et correspondant `a la mati`ere
vue en classe.
Dans ce premier travail, vous devrez vous concentrer sur le lancer des rayons `a partir de la cam´era vers
la sc`ene et le calcul des intersections avec la g´eom´etrie. `
A la fin du premier travail, vous verrez apparaˆıtre la
g´eom´etrie avec une couleur unie, sans effet d’´eclairage. Lors du deuxi`eme travail pratique, vous construirez
sur le code du premier TP afin d’ajouter des effets d’illuminations avanc´es.
Globalement, le moteur de lancer de rayon poss`ede une fenˆetre de pr´evisualisation OpenGL o`u vous
pouvez contrˆoler la cam´era `a l’aide de la souris et pr´evisualiser votre sc`ene. Lorsque vous ˆetes satisfait de
l’angle de vue, vous pouvez appuyer sur la touche rde votre clavier afin de lancer le rendu de votre sc`ene.
`
A ce moment, une deuxi`eme fenˆetre apparaˆıtra et le rendu par lancer de rayons s’y affichera. Bien entendu,
vous n’avez pas encore programm´e le lancer de rayon ni l’affichage des primitives sous OpenGL. Vous ne
verrez donc probablement qu’une sc`ene vide !
Trois classes distinctes forment la base du syst`eme, et la majorit´e de votre travail sera effectu´e dans ces
classes : la classe Scene, la classe Camera et les classes qui h´eritent de Object.
Classe Object :La classe Object est la classe parente de tous les objets affichables contenus dans la
sc`ene. C’est donc dire que les classes dont vous devez impl´ementer l’intersection, soit Sphere,Cylinder,
Plane et Cone d´erivent de cette derni`ere. (La classe Torus peut aussi optionnellement ˆetre impl´ement´ee
pour avoir des points en bonus.) Lors du rendu de la sc`ene dans le pr´evisualisateur OpenGL, la m´ethode
virtuelle glRender() est appel´ee. Vous devrez impl´ementer cette m´ethode en utilisant les commandes OpenGL
vues dans le cours d’infographie (IMN428). Lors du rendu par lancer de rayons, la m´ethode intersects()
est appel´ee pour v´erifier si un rayon intersecte avec l’objet g´eom´etrique. Cette m´ethode doit retourner un
bool´een indiquant si une intersection s’est produite. Si c’est le cas, vous devrez aussi assigner des valeurs aux
param`etres interPos (position du point d’intersection), normal (normale de l’objet au point d’intersection),
distance (distance entre l’origine du rayon et le point d’intersection) et hitColor (couleur de l’objet au
point d’intersection). La couleur est obtenue avec la m´ethode getColor(). Notez que la classe Cube est d´ej`a
impl´ement´ee, tant pour le rendu OpenGL que le calcul d’intersections. Vous pouvez donc vous en inspirer
pour l’impl´ementation des autres classes. La classe Object et les classes en h´eritant sont situ´ees dans le dossier
Raytracer/source/renderables.
Classe Camera :La classe cam´era est situ´ee dans le dossier Raytracer/source/scene de votre travail
pratique. Cette classe sert `a d´efinir les caract´eristique de la cam´era utilis´ee pour le rendu OpenGL et le
rendu par lancer de rayon. La m´ecanique de cam´era sous OpenGL ´etant d´ej`a programm´ee, vous n’aurez
qu’`a vous concentrer sur le lancer de rayon. Lorsque le logiciel demande `a la cam´era de rendre la sc`ene
en utilisant le lancer de rayon, la m´ethode renderRayTracedImage() est appel´ee. Dans cette m´ethode, vous
devrez impl´ementer une boucle lan¸cant des rayons `a travers la sc`ene de mani`ere `a remplir chaque pixel
de l’image `a rendre. Les dimensions de l’image `a rendre sont donn´ees par les param`etres de la m´ethode.
Pour lancer les rayons dans votre sc`ene, vous devrez construire les matrices de transformation mod`ele-
vue et projection de votre cam´era. Ces derni`eres peuvent ˆetre respectivement construites en utilisant les
fonctions cameraModelViewMatrix et perspectiveProjectionMatrix fournies dans le fichier vision helpers.h
situ´e dans le dossier Raytracer/source/base. Ces fonctions requi`erent les caract´eristiques de votre cam´era,
disponibles via les m´ethodes pr´evues `a cet effet dans la classe Camera. Lorsque votre rayon a correctement
´et´e initialis´e, vous pourrez le soumettre `a votre sc`ene (param`etre scene) en utilisant les m´ethodes pr´evues `a
cet effet dans la classe Scene. (Plus de d´etail sur ces m´ethodes dans le paragraphe qui suit.) Les m´ethodes en
question de la classe Scene retourneront une couleur, que vous devrez ´ecrire dans l’image de sortie du lanceur
de rayon. Des informations sur l’´ecriture des couleurs dans un pixel de l’image de sorties sont fournies dans
l’impl´ementation de la m´ethode renderRayTracedImage.
2