GRAPHISME PAR ORDINATEUR SIF-1032
Contenu du cours 6 Visualisation 3D LECTURES: Chapitres 5 et 7 Projection en perspective Découpage 3D Projection en perspective avec OpenGL Modélisation d’objets par MilkShape et importation dans OpenGL Examen LECTURES: Chapitres 5 et 7
Pipeline de visualisation Visualisation 3D Pipeline de visualisation La visualisation 3D peut s’apparenter à la prise d’images par caméra Étapes de capture de photographies Positionnement de la caméra Orientation de la caméra Ajustement de l’ouverture
Pipeline de visualisation Visualisation 3D Pipeline de visualisation Étapes de transformation des coordonnées du monde 3D aux coordonnées de l’écran 2D Modélisation de la scène Transformation des coordonnées du monde en coordonnées de visualisation spécification de la position de l’observateur Positionnement du plan de projection Transformation des coordonnées de visualisation en coordonnées de projection (perspective) dans le plan de projection Transformation des coordonnées de projection dans les coordonnées de l’écran
Volume de visualisation Une fenêtre de visualisation dans le plan de visualisation permet de définir la portion de scène à observer (avec OpenGL: front plane, near plane) Les bordures de la fenêtre sont parallèles aux axes xv et yv et leur position respective est spécifiée en fonction du système de coordonnées de visualisation
Volume de visualisation Les bordures de la fenêtre de visualisation permettent alors de définir un volume de visualisation Seulement les objets dans le volume de visualisation sont affichés à l’écran, les autres sont découpés avant d’être affichés Les dimensions du volume de visualisation sont fonction des dimensions de la fenêtre de visualisation La forme du volume est fonction du type de projec-tion (Frustum si projection perspective)
Volume de visualisation En projection par perspective, le volume est une pyramide avec comme sommet le point de référence de projection
Volume de visualisation Pour limiter la dimension du volume de visualisation nous ajoutons un plan frontal (Zfront, near plane) et un arrière plan (Zback, far plane) qui sont parallèles au plan de visualisation (avec OpenGL: le plan de visualisation est le front plane)
Volume de visualisation (OpenGL) Avec OpenGL, le volume de visualisation est définit par un plan frontal (near plane) et un arrière plan (far plane) Le plan de visualisation est le front plane
Volume de visualisation (OpenGL) L’ouverture de champs (fovy) et le rapport w/h (aspect ration) permettent de définir la dimension des plans rapproché et éloigné
Volume de visualisation (OpenGL)
Transformation généralisée en projection en perspective Le point de référence de projection (prp) peut être localisé à n’importe quelle position dans le système de visualisation sauf dans le plan de visualisation ou entre le plan frontal et l’arrière plan A partir d’un volume de visualisation de forme générale nous obtenons une transformation généralisée en projec-tion en perspective en: Déformant le volume de visualisation pour que la bissectrice du Frustum soit perpendiculaire au plan de visualisation Appliquer la projection en perspective (changement d’échelle)
Transformation généralisée en projection en perspective
Transformation généralisée en projection en perspective Avec un point de référence (xprp,yprp,zprp) la première transformation suppose une déformation (shearing) et une translation Si le prp est sur l’axe Zv xprp = yprp= 0
Transformation généralisée en projection en perspective Le changement d’échelle produit un parallélépipède Si le prp est sur l’axe Zv xprp = yprp= 0
Projection en perspective (explication graphique) Choix d’un point de référence Positionnement du plan de visualisation Front plane
Projection en perspective (explication graphique) Calcul des coordonnées sur la ligne de projection Sur le plan de visualisation z’=zvp on peut déduire u
Projection en perspective (explication graphique) Substituons u dans les équations de x’ et y’
Découpage 3D Le découpage 3D conserve les surfaces qui sont à l’intérieure du volume de visualisation pour l’affichage Les surfaces hors du volume de visualisation sont éliminées Le découpage 3D est semblable au découpage 2D mais plutôt que d’effectuer le découpage par rapport à des bordures rectilignes, le découpage s’accomplit par rapport aux plans du volume de visualisation Pour découper une ligne par rapport au volume de visualisation nous devons vérifier la position de la droite par rapport aux équations des plans du volume de visualisation
Découpage 3D Un point d’extrémité positionné en (x,y,z) est à l’extérieur d’un plan Si Ax + By + Cz + D > 0 Un point d’extrémité positionné en (x,y,z) est à l’intérieur d’un plan Si Ax + By + Cz + D < 0 Si les 2 points terminaux sont à l’extérieur, la ligne est rejetée, si ils sont à l’intérieur la ligne est conservée SINON nous cherchons le point (xI,yI,zI) qui satisfait AxI + ByI + CzI + D = 0
Découpage 3D Avant d’accomplir le découpage 3D nous transformons le volume de visualisation en un parallélépipède Le découpage par rapport à un parallélépipède est plus simple puisque chaque plan du volume de visualisation est perpendiculaire à un des axes de coordonnées
Découpage 3D De plus nous pouvons accomplir le découpage 3D sur un viewport 3D. La pipeline de transformations est décrite par:
Découpage 3D Viewport 3D
Découpage 3D La transformation permettant la création d’un viewport 3D est: Les limites du volume de visualisation sont xwmin, xwmax, ywmin, ywmax, zfront, et zback
Découpage de viewport 3D Nous utilisons le concept de code de région définit pour le découpage 2D En 3D le code de région est de 6 bits Pour un point terminal de coordonnées (x,y,z) l’assigna-tion des bits du code de région s’effectue comme suit: bit 1 = 1 Si x < xvmin (gauche) bit 2 = 1 Si x > xvmax (droite) bit 3 = 1 Si y < yvmin (bas) bit 4 = 1 Si y > yvmax (haut) bit 5 = 1 Si z < zvmin (devant) bit 6 = 1 Si z > zvmax (arrière)
Découpage de viewport 3D Si les extrémités sont à l’intérieur du viewport 3D leur code est 000000, 000000 respectivement Si une opération logique ET entre les 2 codes donne une valeur non nulle c’est que les 2 extrémités sont hors du viewport 3D (Dans la même région) Si les 2 extrémités ne sont pas complètement à l’intérieur ou l’extérieur du viewport 3D nous devons déterminer l’intersection avec les plans du viewport 3D
Découpage de viewport 3D (recherche de l’intersection) Les forme paramétriques des droites 2D peuvent être généralisées en 3D. Sachant que P1= (x1, y1, z1) et P2= (x2, y2, z2) sont les points d’extrémités
Découpage de viewport 3D Les coordonnées (x,y,z) représentent un point sur le segment de droite P1P2 Si nous substituons les coordonnées des plans du viewport 3D nous pouvons isoler u Par exemple, si nous testons une droite par rapport au plan zvmin(plan frontal) alors
Découpage de viewport 3D Si u 0,1 le segment P1P2 ne traverse pas ce plan (Voir la ligne A)
Découpage de viewport 3D Si u 0,1 les coordonnées x,y de l’intersection sont données par:
Découpage de viewport 3D Si xI ou yI ne sont pas dans les limites des bordures du viewport 3D alors cette droite traverse le plan zvmin au delà des limites des bordures du viewport 3D (Voir la ligne B)
Projection en perpective avec OpenGL Avec OpenGL, la matrice de transformation de projection en perspective (GL_PROJECTION) est déduite par la commande gluPerspective() gluPerspective(fovy,aspect,zNear,zFar) fovy représente l’angle d’ouverture du volume de visualisation aspect représente le ratio w/h zNear représente la distance du plan de visualisation (plan frontal) dans la direction de visualisation zFar représente la distance de l’arrière plan dans la direction de visualisation Création du volume de visualisation (Frustum) (voir la procédure ChangeSize()) glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60.0f,w/h,1.0,400);
Projection en perpective avec OpenGL Exemple ORTHO VS PERSPECT
Projection en perpective avec OpenGL Exemple ORTHO VS PERSPECT
Projection en perpective avec OpenGL Exemple ORTHO VS PERSPECT
Projection en perpective avec OpenGL Avec OpenGL, la création du viewport est effectué par la commande glViewport() glViewport(x,y,w,h) x,y représente la position du viewport dans le fenêtre d’affichage (coin inférieur gauche, généralement (0,0)) w,h représente la largeur (w) et la hauteur (h) du viewport Création d’un viewport (voir dans la procédure ChangeSize()) glViewport(0,0,w,h);
Projection en perpective avec OpenGL Voir l’exemple SOLAR
Projection en perpective avec OpenGL Voir l’exemple SOLAR
Modélisation d’objets par MilkShape et importation dans OpenGL Voir le Game Programming Lesson 4 sur le site ftp
Modélisation d’objets par MilkShape et importation dans OpenGL Voir le Game Programming Lesson 4 sur le site ftp
Modélisation d’objets par MilkShape et importation dans OpenGL Voir le Game Programming Lesson 4 sur le site ftp
Modélisation d’objets par MilkShape et importation dans OpenGL Voir le Game Programming Lesson 4 sur le site ftp
Modélisation d’objets par MilkShape et importation dans OpenGL Voir le Game Programming Lesson 4 sur le site ftp
Modélisation d’objets par MilkShape et importation dans OpenGL Voir le Game Programming Lesson 4 sur le site ftp
Examen dans une semaine ….. Bien comprendre les transformations