TD2 - Maillage triangulaire et anti-aliasing
Afin de commencer dans de bonnes conditions, téléchargez l'archive sire_correction_td2.zip qui contient une correction partielle du TD précédent.
La méthode RenderingWidget::render a été modifiée pour permettre la génération en parallèle des rayons primaires par blocs de 32x32 pixels.
L’intégrateur de Whitted inclut la gestion des rayons d'ombres, des réflexions et réfractions.
Une structure accélératrice de type BVH à été ajoutée.
Enfin, le fichier Eigen::AlignedBox3d :
Charger le fichier de scène
Commencez par étudier le code d'intersection avec un plan infini (Plane::intersect). Le cas du triangle est un peu plus complexe, utilisez la méthode de Möller-Trumbore pour l'implémenter (référez-vous au cours). Les deux faces d'un triangle jouent-elles le même rôle ? À vous de choisir...
Pour raytracer un maillage complet, vous devez décommenter une partie du code de Mesh::intersect puis compléter la méthode Mesh::intersectFace. La palette des scènes affichables s'en trouve alors bien élargie, mais au prix d'un temps de calcul croissant.
RenderingWidget::renderBlock pour qu'elle lance plusieurs rayons par pixel,
par exemple à travers une grille régulière nxn placée dans chaque pixel.
n correspondra au paramètre
Dans un premier temps, Utilisez une méthode d'échantillonnage strifiée pour générer les nxn rayons par pixel.
Vous pouvez utiliser la fonction Eigen::internal::random(a,b) pour obtenir un nombre aléatoire entre a et b.
On peut également améliorer les résultats en pondérant la contribution des rayons correspondant à un pixel par un filtre,
par exemple par noyau gaussien (centré sur le centre du pixel).
Il est plus souple de coder une classe Filter qui donnera les poids ainsi que les décalages (par rapport au centre du pixel) associés à chaque rayon.
La scène
Remerciements