TD 7 : surfaces de subdivision
Résumé du TD
Nous allons voir un nouveau schéma de subdivision, ainsi que la façon de l'étendre aux surfaces.
Instructions
On part du squelette de programme fourni.
Tout se passe dans la fonction display. Le programme
définit une grille de points de contrôle (stockée dans
le tableau grid), et il vous reste
à les subdiviser pour faire une surface de subdivision.
On utilise une méthode tensorielle :
- D'abord on effectue un schéma de subdivision sur les lignes de la grille (passage de ixj points à (2i)xj points
- Ensuite, on effectue un schéma de subdivision sur les colonnes de la grille (passage de (2i)xj à (2i)x(2j) points.
- Les deux étapes forment une étape de subdivision pour la surface, et on en effectue plusieurs.
On va utiliser un schéma de subdivision très simple :
- à chaque étape, on double le nombre d'intervalles entre les points
- Pour chaque intervalle (entre un point Pi et un point P(i+1)),
on définit deux points :
- 3/4 Pi + 1/4 P(i+1)
- 1/4 Pi + 3/4 P(i+1)
'Tention, il y a un piège
Pour ne pas avoir juste un carré de surface isolé, on va définir la grille et la surface comme un cylindre : les points de la grille forment un cercle (pour les lignes, mais pas pour les colones).Ca change votre schéma de subdivision, et surtout il ne doit pas être le même suivant i et j (il doit y avoir de légères différences dans l'implémentation).
Sur les lignes, ça se recoupe: quand on sort du tableau, on y re-rentre par l'autre bout. Sur les colonnes, ça ne se recoupe pas.
Pensez à vérifier le comportement de votre surface de subdivision si on bouge les points de contrôle.
De plous en plous difficile
Avec un changement de points de contrôle (également définis dans le fichier source), on peut aussi définir un schéma de raffinement torique (les deux dimensions bouclent).Si vous avez fini avant les autres
Si vous avez fini avant les autres vous pouvez :- augmenter le nombre de points de contrôle, pour définir quelque chose de plus compliqué / intéressant
- tester d'autres schémas de subdivision, par exemple: 1/8 P(i-1) + 3/4 Pi + 1/8 P(i+1)
- améliorer l'éclairage, en particulier du tore.
Pour la semaine prochaine
La semaine prochaine, nous passerons à la programmation sur le GPU. Pour que ça soit plus facile, j'aimerais que vous ameniez vos ordinateurs, avec quelques librairies installées :- Qt, par
TrolltechNokia. - libQGLviewer
- api_graphics,
- GLEW