OpenGL_Remi.doc - Irisa
29 mai 2006 ... Examen SDI ... d'une scène 3D texturée avec plusieurs niveaux de qualité d'
éclairage. ... Partie 1 : Visualisation avec éclairage OpenGL.
Part of the document
Diplôme d'Ingénieur de l'IFSIC
Filière INC
Examen SDI
Lundi 29 mai 2006
Problème OpenGL - à rendre sur une copie séparée
Tous documents autorisés. But : Le but de l'exercice est la création d'un programme OpenGL permettant
la visualisation d'une scène 3D texturée avec plusieurs niveaux de qualité
d'éclairage.
Description de la scène |La scène |[pic] |
|représente une | |
|pièce | |
|rectangulaire | |
|(Cf. schéma | |
|ci-contre). | |
| | |
|Une fenêtre est| |
|placée sur le | |
|mur (mur_2). | |
|Elle mesure 1m | |
|x 1m. Elle est | |
|placée au | |
|centre du mur | |
|et à 1m de | |
|hauteur (le | |
|bord inférieur | |
|de la fenêtre | |
|est à 1m du | |
|sol). | |
Tous les matériaux sont parfaitement diffus. Le plafond est blanc. La pièce
est texturée. Toutes les textures sont des images bitmap dont la taille est
de 256x256 pixels. On dispose de trois textures :
. « tex_sol.jpg » correspond à l'image d'un motif carré de parquet dont
la taille réelle est de 50cmx50cm.
. « tex_pappeint.jpg » correspond à l'image d'une bande de papier peint
de 2,5m de haut et de 1m de large. |[pic] |[pic] |
|tex_sol.jpg |tex_pappeint.jpg |
Remarque . Toute la modélisation se fait à partir de QUAD
. L'échelle utilisée est métrique (1 = 1 m)
. On dispose de toutes les fonctions nécessaires au chargement d'images
« jpg » Partie 1 : Visualisation avec éclairage OpenGL La scène est modélisée et visualisée avec OpenGL et son modèle
d'éclairement. Ecrire les fonctions
. Init_GL() // initialisation d'OpenGL et en particulier pour les
textures
// les lampes ne sont pas demandées
. draw_sol() // dessin de la géométrie et application des
textures
. draw_mur_3() // dessin de la géométrie et application des textures
. draw_mur2() // dessin de la géométrie et application des
textures L'éclairage de la pièce est réalisé par des sources de lumières OpenGL :
. une source ponctuelle à l'intérieur de la pièce, au centre et à 15cm
sous le plafond.
. Une source ponctuelle à l'extérieur, plus haute que le plafond et
éclairant le mur extérieur où il y a la fenêtre On suppose que les initialisations d'OpenGL donne un éclairage correct sauf
pour le plafond qui est très sombre malgré la présence de la lampe à
l'intérieur. Expliquer pourquoi.
Partie 2 : Visualisation avec des textures d'éclairages obtenues par
« lancer de rayons »
On récupère pour chaque mur, sol et plafond des textures en niveaux de gris
correspondant à l'intensité de l'éclairage calculé par un algorithme de
lancer de rayons. On dispose des textures supplémentaires suivantes :
. tex_eclairage_mur_1.jpg
. tex_eclairage_mur_2.jpg
. tex_eclairage_mur_3.jpg
. tex_eclairage_mur_4.jpg
. tex_eclairage_sol.jpg
. tex_eclairage_plafond.jpg Dessiner (en fournissant les justifications) schématiquement les textures
du sol et du plafond. La visualisation OpenGL se fait sans lampe, l'éclairement étant donné par
les textures d'éclairement. Sur chaque mur on « mélange » donc la texture
initiale et la texture d'éclairement. Ecrire le code et les fonctions
. inclusions de fichiers, déclarations des variables ...
. main() // le programme principal
. Init_multi_GL() // les initialisations pour le multitexture
. Init_GL() // initialisation d'OpenGL et en particulier pour les
textures
. draw_sol() // dessin de la géométrie et application des
textures
. draw_mur_3() // dessin de la géométrie et application des textures
. draw_mur2() // dessin de la géométrie et application des
textures Problème Lancer de rayon Ce problème traite du lancer de rayon. Une scène est constituée de Nt
triangles. Elle est rangée dans un tableau à une dimension TRI[num], num (
[0,Nt-1], et contenant une seule source ponctuelle S. L'objectif est
d'accélérer le calcul de l'éclairage direct. Question 1
Comment calculer l'éclairage direct en tout point d'un triangle de la
scène ?
Question 2
Exprimer cet éclairage direct. Donnez le rôle de chaque paramètre.
Question 3
Proposez une structure de données décrivant la scène.
Question 4
Nous voulons accélérer ce calcul. Pour cela, la source ponctuelle est
englobée par un cube de telle façon qu'elle se trouve au centre de ce cube.
Chacune des 6 faces du cube englobant est divisée en LxL pixels. A chaque
face est associé un tableau à deux dimensions, par exemple Pixel1[i,j] pour
la face 1, Pixel2[i,j] pour la face 2 et Pixelk[i,j] pour la face k, i et j
( [1,L]. Un élément d'un tableau Pixelk[i,j] contient le numéro du triangle
(c'est-à-dire l'indice du triangle dans TRI[num],) vu de la source.
Question 4.1
Donner la fonction LightBuff permettant de remplir les six tableaux
Pixelk[i,j], k=1,6.
Question 4.2
Soit P un point d'intersection entre un rayon et la scène. Nous
désirons décider rapidement si P est vu ou non par cette source, sans
calculer l'intersection entre un rayon d'ombre et la scène. Proposer un
algorithme.