GRAPHISME PAR ORDINATEUR

Slides:



Advertisements
Présentations similaires
Chaîne de Synthèse Réel Modélisation Rendu Image Fichier Scène
Advertisements

Module 5 : Implémentation de l'impression
SI28 FLASH MX Partie 1 Jérémy Dufetre - Ludovic Pilache.
! ! ! PROCEDURE TYPE POUR ORGANISER L ’ANONYMAT
Introduction à Virtools
Retour au menu principal. Généralités Lenvironnement Laffichage de la fenêtre Déplacement / sélection dans une feuille Classeurs La gestion des classeurs.
12 novembre 2012 Grégory Petit
Systèmes d’exploitation
LOGOS_w Imagerie La palette des icônes. Le groupe dicônes situé au dessus des images du patient permet dintervenir sur limage affichée et active.
INF-1019 Programmation en temps réel
Réalisation dun travail concret avec des matrices Afficher un objet 3D sur une surface Lui appliqué des transformations Le voir se transformer suivant.
Les requêtes La Requête est une méthode pour afficher les enregistrements qui répondent à des conditions spécifiques. La requête est donc un filtre.
Présentation générale de MapBruit
Initiation à 3D Studio Max
Ce bouton vous donne accès à la plupart des commandes qui étaient auparavant sous le menu Fichier en plus des options de l'application.
Module 1 : Préparation de l'administration d'un serveur
Autodesk® Revit® Building 9
Traitement de textes WinWord 3 e année Sciences économiques, de gestion et commerciales Présenté par NEHAR Attia.
IFT3730: Infographie 3D Transformations Géométriques
Transformations de visualisation en OpenGL
Administration de bases de données spatiales avec SavGIS
SUJETS SPÉCIAUX EN INFORMATIQUE I PIF Contenu du cours Transformations géométriques des objets –Transformations 2D –Transformations entre systèmes.
GRAPHISME PAR ORDINATEUR
Gestion des événements liés à la fenêtre et aux périphériques dentrée.
FICHIERS : Définition : Algorithme général:
Modélisation géométrique à l’aide d’un maillage
Visualisation de surfaces décrites analytiquement
OBJETS ÉLÉMENTAIRES DANS L’ESPACE À TROIS DIMENSIONS
Console MMC de Windows 2000 Présenté par Suzanne Savoie Cours 4.
IFT3730 : Infographie 3D Systèmes et modèles graphiques Pierre Poulin, Derek Nowrouzezahrai Hiver 2013 DIRO, Université de Montréal.
Module 2 : Préparation de l'analyse des performances du serveur
L’AIRE … dans tous ses états ! Projet Dédra-math-isons Par:
Les présentations assistées par ordinateur (préAO)
GRAPHISME PAR ORDINATEUR SIF Contenu du cours 3 Autres outils de dessin (Suite) –Découpage 2D Modélisation d ’objets 3D sous forme de maille polygonale.
GRAPHISME PAR ORDINATEUR SIF Contenu du cours 2 Introduction à XNA –Installation de XNA 4.0 –Premier projet –Gestion des ressources (images, vidéo.
Plan de la leçon Réf. p. WRD- 149 Les styles Les listes hiérarchiques
GRAPHISME PAR ORDINATEUR
Introduction à Visual Studio C++ (VC++)
Institut de sciences et technologies Département d’informatique
Chapitre VIII Découpage d’une scène selon une fenêtre donnée.
CHAPITRE III Calcul vectoriel
GRAPHISME PAR ORDINATEUR SIF Contenu du cours 10 Textures –Définir la texture –Superposition d’une texture sur une surface plane –Superposition.
GRAPHISME PAR ORDINATEUR SIF Contenu du cours 6 Transformation et animation de plusieurs modèles 3D avec XNA –Chargement des modèles 3D (modèle.
PROGRAMMATION INFORMATIQUE D’INGÉNIERIE II
GRAPHISME PAR ORDINATEUR SIF Contenu du cours 8 Rendu de surfaces –Modèles de rendu de surfaces –Illumination de la scène –Sources lumineuses –Composante.
Iup MIAGe 3° année Projet MIAGe Toulouse – Groupe 21 Charte graphique.
GRAPHISME PAR ORDINATEUR
Adobe Photoshop Création Bitmap.
GRAPHISME PAR ORDINATEUR SIF Contenu du cours 3 Introduction à XNA –Modélisation d’objets 3D –Transformations 3D: matrices, systèmes de coordonnées.
Visualisation des flots optiques en 3D
GRAPHISME PAR ORDINATEUR
GRAPHISME PAR ORDINATEUR SIF Contenu du cours 2 Introduction à XNA –Installation de XNA 4.0 –Premier projet –Gestion des ressources (images, vidéo.
GRAPHISME PAR ORDINATEUR
GRAPHISME PAR ORDINATEUR SIF Contenu du cours 7 Introduction à l’illumination avec XNA Voir le tutoriel:
WINDOWS SEVEN.
Premières notions de la 3D
Scénario Les scénarios permettent de modifier la position, taille … des calques au cours du temps. Son fonctionnement est très proche de celui de Macromedia.
FLASH MX : séance 1 Sandrine Rabin Nicolas Mollet SI28.
FLASH MX 1ère Séance. Introduction Création d’animation pour le Web, pouvant contenir une forte interactivité. Faible poids des fichiers. Compatible avec.
DREAMWEAVER Première séance Villaron Audrey – Shibly Tarek.
EXPOSE N° 1 Thomas CLARISSE Yann GUIGUET.
Padmanaathan Gaayathrie
SI28 Partie 1 Bruno Binet FLASH MX. Les atouts de Flash Création d’animation pour le Web, pouvant contenir une forte interactivité Faible poids des fichiers.
** Flash séance 2 Action script. ** Action Script Ajoute de l’interactivité Permet de contrôler les clips  Langage de programmation orienté objet.
Dreamweaver le retour Avec Les Formulaires Les Calques
FLASH SEANCE 1 – SI28 Benjamin MONTICO GI05 Automne 2006 Cyrille BOITEL, Sofiann YOUSFI MONOD Printemps 2007 Écriture interactive & multimédia Présentation.
Dreamweaver 2 Feuilles de Style CSS Formulaires Calques Comportements
Les calques Les Template (modèles) Les Comportements Les scénarios Les formulaires Les CSS Le serveur Web de l’UTC Présentation.
Les vues O.Legrand G.Seront. Les vues Dans Android, une ihm est composée de vues. Ces vues.
Transcription de la présentation:

GRAPHISME PAR ORDINATEUR SIF-1032

Contenu du cours 3 Autres outils de dessin (Suite) Découpage 2D Modélisation d ’objets 3D sous forme de maille polygonale OpenGL dans une application Dialogue Autres éléments d’interface Introduction aux transformations 3D (OpenGL 3.x) LECTURES: Chapitres 3 et 6

Découpage 2D (clipping) Une procédure qui identifie les portions d’une image qui sont à l’intérieur ou à l’extérieur d’une fenêtre (window) donnée, est appelée procédure de découpage (clipping) Les portions d’image à l’extérieur de la fenêtre sont alors éliminées et seulement l’intérieur de la fenêtre est conservé pour l’affichage L’algorithme de découpage est appliqué aux coordonnées du monde. Seul le contenu de la fenêtre est converti en coordonnées du dispositif d’affichage (Viewport)

Découpage 2D (clipping) L’image en coordonnées du monde peut être convertie en coordonnées du viewport et ensuite découpée par rapport aux contours du port de visualisation (Viewport) Le découpage est cependant plus performant quand il est appliqué directement à la fenêtre en coordonnées du monde Dans un environnement OPENGL, le découpage des objets (2D ou 3D) est effectué automatique-ment

Une procédure de découpage de lignes comportent plusieurs étapes Nous déterminons d’abord si une ligne est contenue complètement dans la fenêtre de découpage Si elle ne l’est pas, nous déterminons si elle est complètement à l’extérieur de la fenêtre Si elle n’est ni complètement à l’extérieur ou l’intérieur nous devons déterminer les intersections avec les bordures de la fenêtre de découpage Les extrémités des lignes sont utilisées pour déterminer si une ligne est complètement à l’intérieur ou l’extérieur

Découpage de lignes

Découpage de lignes Les autres droites traversent au moins une bordure Pour minimiser le nombre d’intersections à calcu-ler il faut éliminer le plus de lignes extérieures possibles Pour déterminer les intersections nous utilisons la représentation paramétrique de la droite avec comme points d’extrémité (x1,y1) et (x2,y2)

Découpage de lignes Si la valeur de u pour une intersection avec une des bordures de la fenêtre de découpage est hors de l’intervalle 0..1, la ligne n’entre pas dans la fenêtre par cette bordure. Point d’intersection avec u > 1

Découpage de lignes Si au contraire la valeur de u est dans l’intervalle 0..1 la ligne croise une des bordures de la fenêtre de découpage 0 < u < 1

Découpage de lignes Nous devons répéter cette opération pour chaque bordure Cette méthode est onéreuse en temps machine

Algorithme Cohen-Sutherland (p. 99 Hill) Cette méthode est plus rapide puisque le nombre d’intersections à calculer est réduit à l’aide d’une phase de test initial sur les droites Les points d’extrémités des lignes sont associés à un code de 4 bits appelé code de région (region code). Ce code permet d’identifier la position des points par rapport aux bordures de la fenêtre de découpage Chaque bit détermine la position relative d’un point par rapport à la fenêtre de découpage, à gauche (bit 1), à droite (bit 2), en bas (bit 3) et en haut (bit 4)

Algorithme Cohen-Sutherland Codes de région

Algorithme Cohen-Sutherland L’assignation des codes de régions s’effectue en comparant les points d’extrémités des droites chacun représenté par ses coordonnées (x,y) aux bordures de la fenêtre de découpage Bit 1 = 1 SI x < xwmin Bit 2 = 1 SI x > xwmax Bit 3 = 1 SI y < ywmin Bit 4 = 1 SI y > ywmax Si les deux extrémités d’une droite possèdent un code 0000 cette ligne est complètement dans la fenêtre de découpage (trivial accept)

Algorithme Cohen-Sutherland Si les extrémités possèdent un code avec des bits à 1 aux mêmes positions, la droite est complètement hors de la fenêtre de découpage et nous rejetons (trivial reject) cette droite Si aucun des tests précédents n’est satisfait nous devons alors chercher si il existe des intersections Le découpage d’une ligne consiste à déterminer le segment de droite pouvant être découpé A partir d’une extrémité nous cherchons les segments hors de la fenêtre de découpage et conservons le segment à l’intérieur

Algorithme Cohen-Sutherland

Algorithme Cohen-Sutherland P1est sous la bordure inférieure L’intersection P’1 est trouvée Le segment P1 P’1 est éliminé A partir de P2 nous trouvons l’intersection P’2 (bordure gauche) Le segment P2 P’2 est éliminé A partir de P’2 nous trouvons l’intersection P’’2 Le segment P’2 P’’2 est éliminé Le segment P’1 P’’2 est conservé

Algorithme Cohen-Sutherland Les points d’intersections avec la fenêtre de découpage sont déterminés en utilisant une forme particulière de l’équation de la droite Avec une droite ayant comme points d’extrémité (x1,y1) et (x2,y2) la coordonnée y d’un point d’intersection avec une bordure verticale est

Algorithme Cohen-Sutherland La coordonnée x d’un point d’intersection avec une bordure horizontale est

Découpage de polygones Les contours d’un polygone traité par un algorithme de découpage de ligne peu produire un ensemble de segments de droites non connectés

Découpage de polygones Nous devrions par contre observer un ensemble de surfaces fermées. La sortie d’un algorithme de découpage de polygone devrait être une suite de sommets composant les contours du polygone découpé.

Algorithme Sutherland-Hodgeman Le découpage de polygone s’effectue en traitant chaque sommet du polygone par rapport aux bordures de la fenêtre L’ensemble des sommets originaux sont en premier lieu utilisés pour découper le polygone par rapport à la bordure de gauche de la fenêtre Les sommets qui restent sont par la suite utilisés pour découper le nouveau polygone par rapport à la bordure de droite Le même principe s’applique aux bordures inférieures et supérieures

Algorithme Sutherland-Hodgeman Découpage successif

Algorithme Sutherland-Hodgeman Chaque paire de sommets adjacents est traitée selon les 4 situations suivantes: SI le sommet de départ du segment est hors de la fenêtre et le sommet final à l’intérieur ALORS l’intersection et le sommet final sont ajoutés à la liste des sommets de sortie SI les 2 sommets sont à l’intérieur de la fenêtre ALORS seul le sommet final est ajouté à la liste des sommets de sortie SI le sommet de départ du segment est dans la fenêtre et le sommet final à l’extérieur ALORS seule l’intersection est ajouté à la liste des sommets de sortie SI les 2 sommets sont hors de la fenêtre ALORS aucun sommet n’est ajouté à la liste des sommets de sortie

Algorithme Sutherland-Hodgeman Chaque paire de sommets adjacents est traitée selon les 4 situations suivantes:

Algorithme Sutherland-Hodgeman Autre exemple en mettant en valeur la pipeline de découpage de polygone BORDURE SOMMETS RÉSULTANTS gauche V1 V1’ V2’ V3 droite V1 V1’ V2’ V3 bas V2’’ V2’ V3 V3’ haut V2’’ V2’ V3 V3’

Modélisation d’objets 3D Une maille polygonale peut servir à modéliser les formes 3D Une maille polygonale est constituée d ’une liste de polygones Chaque polygone est représenté par ses sommets De plus, chaque polygone est caractérisé par son orienta-tion spatiale donnée souvent par la normale au plan dans lequel se trouve le polygone

Modélisation d ’objets 3D Représentation d’objet 3D en fil-de-fer

Modélisation d ’objets 3D Représentation d’objet 3D en fil-de-fer avec les normales

Modélisation d ’objets 3D Calcul des normales Si chaque polygone est une surface plane Sélectionner trois sommets adjacents du polygone, P1, P2, P3 et calculer le produit vectoriel N = V1 X V2 = (P1 - P2) X (P3 - P2)

Modélisation d ’objets 3D Calcul des normales

Modélisation d ’objets 3D Calcul des normales

Modélisation d ’objets 3D Calcul des normales Si chaque polygone est une surface plane Sélectionner trois sommets adjacents du polygone, P1, P2, P3 et calculer le produit vectoriel N = V1 X V2 = (P1 - P2) X (P3 - P2)

Modélisation d ’objets 3D Calcul des normales Si chaque polygone est une surface plane Sélectionner trois sommets adjacents du polygone, P1, P2, P3 et calculer le produit vectoriel N = V1 X V2 = (P1 - P2) X (P3 - P2)

Modélisation d ’objets 3D Calcul des normales Si chaque polygone est une surface plane Sélectionner trois sommets adjacents du polygone, P1, P2, P3 et calculer le produit vectoriel N = V1 X V2 = (P1 - P2) X (P3 - P2)

Modélisation d ’objets 3D Calcul des normales Si chaque polygone est une surface pas strictement plane constitué de n sommets

OpenGL dans une application Dialogue Cette section explique comment intégrer OpenGL à une application Dialogue développée en VC++. Le chapitre 17 de la Super Bible explique qu'il faut créer un contexte de périphérique compatible avec OpenGL. Ce contexte est représenté par un handle Windows noté "HWGL". L'exemple no. 1 dans Samples OpenGL de la documentation Visual Studio est utilisé comme référence pour expliquer ces notions d’intégration.

OpenGL dans une application Dialogue Notez que la documentation des fonctions OpenGL se trouve comme suit (no filter):

OpenGL dans une application Dialogue La classe de base de toutes les fenêtres sous Windows est CWnd. Pour utiliser une fenêtre de dialogue, la méthode la plus simple est de créer une nouvelle classe dérivée de CWnd. Les objets de cette classe seront responsables des dessins OpenGL. Le programme suivant montre comment définir cette fenêtre.

OpenGL dans une application Dialogue

OpenGL dans une application Dialogue Au bas de l’interface on retrouve des scrollbars qui contrôlent l'ouverture de la caméra synthétique et les déplacements de la scène. La partie supérieure de l’interface correspond à la fenêtre spéciale dédiée à l’affichage des opérations graphiques en OpenGL. Cette application est basée sur la réutilisation du code de l'exemple "Triangle" dans lequel on a standardisé l’environnement au mode CCW (counter clockwise règle de la main droite). Un menu principal est aussi intégré à l’interface.

OpenGL dans une application Dialogue Menu principal On peut charger et sauvegarder les positions des scrollbars et réinitialiser la position de tous les scrollbars.

OpenGL dans une application Dialogue Un dialogue est aussi disponible pour la sélection des propriétés de l'affichage:

OpenGL dans une application Dialogue Les options par défaut exposées dans la figure précédente sont celles qui sont utilisées dans la majorité des cas. La seule option supplémentaire qui peut être intéressante est la vue en fils de fer (décocher Fill Polygon). Voir le site ftp du cours pour accéder au code de ce projet: ftp://www.uqtr.ca/pub/dmat/meunier/sif1032/opengl/ProjetTriangleFan

OpenGL dans une application Dialogue Présentation sommaire du programme:

OpenGL dans une application Dialogue La classe "cDrawWin" offre des objets qui permettent de dessiner en mode OpenGL. La classe cMaHScroll gère les scrollbars La classe cDiaProprietes gère le dialogue qui permet d’établir les propriétés d'affichage. L’objet "m_graphe" représente la fenêtre OpenGL (fond noir). L’objet "diaProp" représente la fenêtre des propriétés. Au début du fichier de code du dialogue, un pointeur sur le dialogue des propriétés permet à la fonction de dessin (draw()) d’accéder aux options de dessin.

OpenGL dans une application Dialogue Code du dialogue:

OpenGL dans une application Dialogue Code du dialogue:

OpenGL dans une application Dialogue Code du dialogue:

OpenGL dans une application Dialogue Code du dialogue:

OpenGL dans une application Dialogue Code du dialogue:

OpenGL dans une application Dialogue Code du dialogue:

OpenGL dans une application Dialogue Code du dialogue:

OpenGL dans une application Dialogue Dans la fonction OnInitDialog(), la fenêtre OpenGL est créée avec l’appel "m_graphe.myCreate(this,&rd,draw);". Ensuite, les scrollbars sont initialisés. Notez que les valeurs des scrollbars comme "ouverture, angleX, etc" sont placés dans autre fichier appelé "draw.cpp" et qui contient tout le code OpenGL. Les méthodes qui permettent de gérer les scrollbars, le menu contextuel et le clavier sont aussi présentés.

OpenGL dans une application Dialogue La fenêtre OpenGL (classe cDrawWin) est présentée dans "cDrawWin.h":

OpenGL dans une application Dialogue Au moment de la création de cette fenêtre avec "myCreate", la fenêtre-parent (le dialogue principal) et la fonction responsable des dessins de type "DrawFuncType" sont passés en argument de la méthode. Le handle spécial qui s'occupe du contexte de périphérique associé à OpenGL est stocké dans "m_hrc".

OpenGL dans une application Dialogue Code de cDrawWin.cpp (L'élément le plus important de la gestion d'OpenGL consiste à choisir le type des pixels): Cette classe ne devrait pas être modifiée

OpenGL dans une application Dialogue Code de cDrawWin.cpp

OpenGL dans une application Dialogue Code de cDrawWin.cpp

OpenGL dans une application Dialogue Code de cDrawWin.cpp

OpenGL dans une application Dialogue Code de cDrawWin.cpp

OpenGL dans une application Dialogue Code de cDrawWin.cpp

OpenGL dans une application Dialogue Code de cDrawWin.cpp

OpenGL dans une application Dialogue Les fichiers draw.h et draw.cpp contiennent toutes les opérations OpenGL Le premier (draw.h) ne contient que les variables servant aux options et aux scrollbars:

OpenGL dans une application Dialogue Le code OpenGL est dans le fichier draw.cpp

OpenGL dans une application Dialogue Le code OpenGL est dans le fichier draw.cpp

OpenGL dans une application Dialogue Fichier draw.cpp: Création du cornet (triangle fan)

OpenGL dans une application Dialogue Fichier draw.cpp: Création du fond (triangle fan)

OpenGL dans une application Dialogue Fichier draw.cpp: Fonction setupGL()

OpenGL dans une application Dialogue Fichier draw.cpp: Fonction draw()

OpenGL dans une application Dialogue Dans le code précédent, on a fait les changements nécessaires pour observer la règle de la main droite (CCW). La projection orthogonale est remplacée par une projection en perspective qui est plus réaliste Finalement, on montre comment réaliser les déplacements de la scène. Notez que l'observateur est placé à l'origine et regarde du côté négatif de l'axe z.

Autres éléments d’interface L’utilisation d’un timer peut être requise quand nous voulons animer une scène La classe du dialogue étant dérivée de CWnd, on peut utiliser les fonctions de gestion du temps SetTimer, KillTimer et OnTimer. La fonction SetTimer() définit la durée des intervalles de temps en milli-secondes entre les événements WM_TIMER. À chaque durée de temps écoulée, on traite le message WM_TIMER avec la fonction OnTimer().

Autres éléments d’interface D'abord, on doit définir un timer comme suit dans la fonction InitDialog(): int r=SetTimer(1,100,NULL); // définir un timer no. 1, // intervalle: 100 milli. sec

Autres éléments d’interface Ensuite, la fonction DestroyWindow() est redéfinit dans les Overrides du dialogue:

Autres éléments d’interface Ensuite, la fonction DestroyWindow() est redéfinit dans les Overrides du dialogue:

Autres éléments d’interface Ensuite, la fonction DestroyWindow() est redéfinit dans les Overrides du dialogue:

Autres éléments d’interface La fonction OnTimer() est ensuite définit et sera alors associée avec le message WM_TIMER du dialogue:

Autres éléments d’interface La fonction OnTimer() est ensuite définit et sera alors associée avec le message WM_TIMER du dialogue:

Autres éléments d’interface La fonction OnTimer() est ensuite définit et sera alors associée avec le message WM_TIMER du dialogue:

Autres éléments d’interface La fonction OnTimer() est ensuite définit et sera alors associée avec le message WM_TIMER du dialogue:

Autres éléments d’interface Notez dans le code précédent que 2 fenêtres OpenGL, m_graphe et m_graph2, sont déclarées. La zone de dessin est donc séparée en 2 sections. La méthode InitDialog() (cubeDlg.cpp) permet de créer ces deux fenêtres. Il faut donc ajouter la variable "m_graph2" au fichier cubeDlg.h du dialogue. Les fonctions d'affichage draw1() et draw2() permettent d’afficher les objets graphiques OpenGL dans chacune des fenêtres:

Autres éléments d’interface La fonction InitDialog() (cubeDlg.cpp) permet la création des fenêtres:

Autres éléments d’interface Ajout de la variable "m_graph2"

Autres éléments d’interface Fonctions draw1() et draw2() (draw.cpp):

Autres éléments d’interface Exécution du projet

Autres éléments d’interface Voir le site ftp du cours pour accéder au code de ce projet: ftp://www.uqtr.ca/pub/dmat/meunier/sif1032/opengl/ProjetTriangleFan2Fenetres

Introduction aux transformations 3D (openGL 3.x) Voir le tutoriel: Installer la librairie mathématique GLM https://www.opengl.org/sdk/libs/ http://www.opengl-tutorial.org/beginners-tutorials/tutorial-3-matrices/ 4X4 4X1 4X1 Matrice de transformation Vecteur à transformer Vecteur transformé

Introduction aux transformations 3D (openGL 3.x) Transformation 3D en C++ avec GLM Transformation 3D avec GLSL

Introduction aux transformations 3D (openGL 3.x) Transformation 3D (translation) Exemple de translation (10,0,0,1), d’un sommet (10,10,10,1)

Introduction aux transformations 3D (openGL 3.x) Transformation 3D (translation: en C++ avec GLM) Translation avec GLSL

Introduction aux transformations 3D (openGL 3.x) Transformation 3D (Matrice identité) Initialisation de la matrice identité (C++)

Introduction aux transformations 3D (openGL 3.x) Transformation 3D (Changement d’échelle) Agrandissement de 2 Transformation 3D (Changement d’échelle en C++ avec GLM)

Introduction aux transformations 3D (openGL 3.x) Transformation 3D (Rotation C++ avec GLM) Transformation 3D (Succession de transformations) Ordre d’exécution

Introduction aux transformations 3D (openGL 3.x) Transformation 3D (Succession de transformations, C++ avec GLM) Avec GLSL

Projet de session (Rappel) Constitution des équipes Choix du projet (animation, image de synthèse, objets impliqués) Choix du modèle de représentation des objets Répartition initiale des tâches (important) Premier échéancier (09 mars 2015) objets modélisés visualisation des objets animation simple dans l’espace