TD3: le Cube
Dessin d'un cube en 3D en fil de fer ou faces pleines,
en projection orthogonale ou perspective.
Notions abordées: Définition des volumes 3D et projections
(orthographiques ou perspectives) , Représentation interne d'un cube. Dessin
fil de fer ou faces pleines. Orientation des faces d'un polygone.
Le travail à réaliser:
Le cube à dessiner est fourni ci-contre.
- Créer une structure de données pour décrire
un cube comme un ensemble de faces.
Par exemple,
- le type cube sera un ensemble
de 6 faces F0, F1, F2...
- Le type face sera la réunion des références à ses 4 sommets (par exemple P0, P5, P4 et P1, dans cet ordre, pour F0,
etc.), d'un vecteur (la normale à la face, que nous n'utiliserons pas
dans ce TP, mais que vous pouvez déjà prévoir), et d'une
couleur (par exemple 3 float R, V, B).
- Le type point, comme le type vecteur sera un ensemble de 4 float x, y, z, w (nous travaillerons en coordonnées
homogènes).
- Les caractéristiques du cube centré sur O(0,
0, 0) sont:
- P1 (10,10,10),
- les plans déterminés par les faces du cube ont des équations
telles que: x=10, x=-10, y=10, y=-10, z=10 et z=-10.
- Le cube sera présenté légèrement tourné.
Vous effectuerez par exemple pour cela une rotation de 10° selon l'axe des
x et de -35° selon l'axe des y.
- Afficher le cube ainsi tourné :
- à l'aide d'une projection orthogonale et
- l'aide d'une projection perspective.
NB:
Vous pouvez prendre pour volume visualisable de la projection
perspective le volume défini par le coin inférieur gauche avant
(-20, -20, -20), le coin supérieur droit avant (20, 20, -20) et le plan
de clipping arrière z=-60. Rappel: dans une proj. persp.
Open GL, le point de vue est en O(0, 0, 0), on regarde vers les z négatifs
et le volume visualisable est compris entre z=-devant et z=-derriere, devant
et derrière étant positifs et valant dans le cas présent
20 et 60. Il faut donc déplacer le cube centré en 0 pour qu'il
rentre dans le volume de visualisation.
- Orientation des facettes
- Adopter un tracé différent (GL_FILL et GL_LINE) pour les faces avant et les faces arrière pour s'assurer que toutes les facettes ont été correctement orientées
- Elimination des faces cachées et faces arrières:
- Utiliser le culling pour éliminer les faces arrières
- Utiliser le depth buffer pour éliminer les faces cachées