GRAPHISME PAR ORDINATEUR

Slides:



Advertisements
Présentations similaires
Transformations de visualisation en OpenGL
Advertisements

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
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.
GRAPHISME PAR ORDINATEUR SIF Contenu du cours 5 Visualisation 3D –Pipeline de visualisation –Coordonnées de visualisation –Projection orthographique.
GRAPHISME PAR ORDINATEUR
GRAPHISME PAR ORDINATEUR SIF Contenu du cours 5 Visualisation 3D –Pipeline de visualisation –Coordonnées de visualisation –Projection orthographique.
Catalog fonctionne sur vos données Catalog est préconfiguré pour fonctionner directement avec les données – WinBooks Accounting – WinBooks Logistics –
Modélisation Géométrique Cours 4 : Acquisition de la géométrie.
CINI – Li115 1 Semaine 4 Révisions ● Questions de cours ● Types des expressions ● Déclaration de variables ● Instruction conditionnelle et boucles ● Structure.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Fonctions ● Namespace ● Tests ● Boucles ● Pointeurs, références.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Types et opérations fondamentales ● Tests ● Boucles ● Pointeurs, références.
Calcul des charges en été Utilisation de la feuille de calcul Connaissances de base YLC.
Chapitre 11 Différents champs. Notion de champ
La projection orthogonale Le dessin technique permet une représentation graphique plane des formes d’une pièce, selon une direction d’observation donnée.
Les PREF, DEC, et jauges outils En tournage, puis en fraisage En fraisage directement P roductique M écanique U sinage LP Irénée Cros Pamiers Tâche principale.
Utilisation du logiciel EduStat©
I- ANALYSE DU BESOIN / Plan
Faculté des sciences Aïn chock Systèmes de coordonnées
Environnement du développement de BD ORACLE REPORTS 10g
Pas de variable globale
Les notions de classe et d'objet
Projet Ville de Lyon Sites Internet
Acquisition Rapide Multivoies
Les Processeurs Graphiques Programmables
Fonctions affines.
La mécanique du solide 2 L’équilibre statique.
1 LA PROJECTION ORTHOGONALE
Chapitre 3 Le théorème de Gauss.
SIF-1053 Architecture de ordinateurs
On se déplace 12m [O] ensuite 8m [N]. Quel est notre déplacement?
Chapitre 7: L’algèbre des vecteurs
OpenGL et WebGL, comparaison de performances dans le framework Geant4
La perspective Les projections parallèles et centrales.
Les dessins isométriques (perspectives) Document de travail 20/08/07.
Tolérances géométriques : Exercices GRETA de Reims 1 Élément(s) tolérancé(s) : Élément(s) de référence : Référence(s) spécifiée(s) : Zone(s) de tolérance.
GRAPHISME PAR ORDINATEUR
GRAPHISME PAR ORDINATEUR
GRAPHISME PAR ORDINATEUR
GRAPHISME PAR ORDINATEUR
PROGRAMMATION INFORMATIQUE D’INGÉNIERIE II
GRAPHISME PAR ORDINATEUR
GRAPHISME PAR ORDINATEUR
GRAPHISME PAR ORDINATEUR
GRAPHISME PAR ORDINATEUR
Programmation en C++ C++ de base
PLAN DE LA LEÇON  I- MISE EN SITUATION I- MISE EN SITUATION  II- DISPOSITION DES VUES II- DISPOSITION DES VUES  1- Exemples :  2- Exercice  3- Convention.
© Jerome Boccond-Gibod, Flickr
La caméra GIF-4105/7105 Photographie Algorithmique, Hiver 2015
GRAPHISME PAR ORDINATEUR
Emboutissage incrémental Département génie mécanique.
Système de coordonnées
Système de coordonnées
Système de coordonnées
Polytech'Nice-Sophia, Département Sciences Informatiques Cours de 4 ème année : Commande par Ordinateur. semaine 5/6, 29/04/2018Page 1 Commande optimale.
Polytech'Nice-Sophia, Département Sciences Informatiques Cours de 4 ème année : Commande par Ordinateur. semaine 5/6, 04/09/2018Page 1 Commande optimale.
Le morphage d’images Steph Hoffman
Cours de physique générale I Ph 11
3D 2D Le langage des lignes Conception graphique
Programmation graphique
Transformation linéaires
Chapitre A4 Propriétés des ondes.
Plan cartésien (4 quadrants) Transformations (réflexion / translation)
Cinématique : concepts de base
Projection, cosinus et trigonométrie.
GRAPHISME PAR ORDINATEUR
1/16 CINEMATIQUE 1) Cinématique du point 2) Dérivation vectorielle.
Chapitre10 : Symétrie axiale
INTELLIGENCE ARTIFICIELLE
Chapitre P4 : Mouvement d’un solide indéformable I) Quelques rappels de seconde : 1)Nécessité d’un référentielNécessité d’un référentiel 2)TrajectoireTrajectoire.
Transcription de la présentation:

GRAPHISME PAR ORDINATEUR SIF-1032

Contenu du cours 5 Visualisation 3D Piles de matrices (Voir ATOM) Pipeline de visualisation Coordonnées de visualisation Projection orthographique (Voir ORTHO) Piles de matrices (Voir ATOM) Gestion d’interactions clavier/souris avec OpenGL 3.x. 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 dans le plan de projection Transformation des coordonnées de projection dans les coordonnées de l’écran

Pipeline de visualisation Visualisation 3D Pipeline de visualisation Étapes de transformation des coordonnées du monde 3D aux coordonnées de l’écran 2D

Coordonnées de visualisation Visualisation 3D Coordonnées de visualisation Pour définir une vue d’une scène il faut d’abord établir le système de coordonnées de visualisation De plus, le plan de projection est perpendiculaire à l’axe de visée zv

Coordonnées de visualisation Visualisation 3D Coordonnées de visualisation Étapes de création du système de coordonnées de visualisation Choix d’une position en coordonnées du monde 3D qui est le point de référence de visualisation Choix de la direction de l’axe de visualisation zv et l’orientation du plan de visualisation en spécifiant le vecteur normal au plan de visualisation N Vecteur dans les coordonnées du monde 3D Sélection d’un point à voir (look-at-point) relatif au système de coordonnées de visualisation

Coordonnées de visualisation Visualisation 3D Coordonnées de visualisation Sélection d’un point look-at-point

Coordonnées de visualisation Visualisation 3D Coordonnées de visualisation Étapes de création du système de coordonnées de visualisation Choix d’un vecteur V (view-up vector) qui spécifie la direction positive de l’axe yv Déterminer la direction de l’axe xv par

Coordonnées de visualisation Visualisation 3D Coordonnées de visualisation Détermination du système d ’axes de visualisation Calcul des vecteurs unitaires uvn et création directe de la matrice de transformation composite Avec N et V nous pouvons déduire

Coordonnées de visualisation Visualisation 3D Coordonnées de visualisation Transformations des coordonnées du monde 3D aux coordonnées de visualisation

Coordonnées de visualisation Visualisation 3D Coordonnées de visualisation Transformations des coordonnées du monde 3D aux coordonnées de visualisation Translation du point de référence de visualisation à l’origine du système d’axes du monde 3D Appliquer des rotations pour aligner les axes des 2 systèmes d’axes Rx: rotation de l’axe zv par rapport à l’axe xw, dans le plan xwzw Ry: rotation de zv par rapport à l’axe yw pour l’amener sur l’axe zw Rz: rotation de yv par rapport à l’axe zw pour l’amener sur l’axe yw

Coordonnées de visualisation Visualisation 3D Coordonnées de visualisation Transformations des coordonnées du monde 3D aux coordonnées de visualisation Si nous connaissons le vecteur uvn, la matrice de transformation composite devient

Coordonnées de visualisation Visualisation 3D Coordonnées de visualisation Détermination du système d ’axes de visualisation Avec OpenGL, la matrice de transformation de visualisation Mw,v est déduite par la commande gluLookAt() gluLookAt(locX,locY,locZ,dirX,dirY,dirZ,upX,upY,upZ généralement le vecteur up pointe dans la direction y positive donc (0.0f,1.0f,0.0f) LocX, locY, locZ représente la position de l ’observateur dirX, dirY, dirZ représente le Look-at point Positionnement de la caméra (observateur) glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(4,4,4,0,1,0,0,1,0);

Visualisation 3D Projections Permet de projeter les coordonnées de visualisation 3D sur un plan 2D Projection parallèle (orthographique) Projection de points 3D sur le plan de visualisation 2D selon des lignes parallèles Préservation des proportions relatives mais irréaliste

Visualisation 3D Projections Projection parallèle Projection orthographique Utilisée en dessin technique

Visualisation 3D Projections Projection parallèle Transformations permettant la projection

Visualisation 3D Projections Projection parallèle Transformations permettant la projection orthographique avec OpenGL Avec OpenGL, la matrice de transformation de projection (GL_PROJECTION) est déduite par la commande glOrtho() glOrtho(minX,maxX,minY,maxY,minZ,maxZ) minX, maxX représente la largeur de la fenêtre minY, maxY représente la hauteur de la fenêtre minZ, maxZ représente la profondeur de champ Création du volume de visualisation glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-3.2,3.2,-2.4,2.4,1,50);

Visualisation 3D Projections (Exemple ORTHO)

Visualisation 3D Projections (Exemple ORTHO)

Visualisation 3D Projections (Exemple ORTHO)

Piles de matrices Il n ’est pas toujours désirable de réinitialiser la matrice MODELVIEW à l ’identité avant de déplacer des objets Souvent, nous voulons conserver la matrice courante et la restaurer après avoir déplacé des objets Cette approche est appropriée lorsque nous avons généré la matrice MODELVIEW à partir des transformations de visualisation OpenGL maintient des piles de matrices pour les matrices MODELVIEW et PROJECTION

Piles de matrices Nous pouvons alors conserver la matrice courante sur le dessus de la pile (push), appliquer une transformation sur la matrice courante et restaurer l ’état de la matrice courante par un pop

Piles de matrices Exemple ATOM Comment initialiser la matrice de visualisation Mw,v glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0.0f,0.0f,-100.0f); Comment placer un électron sur sa trajectoire glPushMatrix(); // conserve la matrice de transformation de visualisation glrotatef(fElect1,0.0f,1.0f,0.0f); // rotation du système de coordonnées // par rapport à y d ’un angle fElect1 glTranslatef(90.0f,0.0f,0.0f); // décalage de l ’origine à la trajectoire glutSolidSphere(6.0f,15,15) glPopMatrix(); // restauration de la matrice transformation de visualisation

Piles de matrices Exemple ATOM Comment initialiser la matrice de visualisation Mw,v

Piles de matrices Exemple ATOM Comment placer un électron sur sa trajectoire

Piles de matrices Exemple ATOM Comment placer un électron sur sa trajectoire

Piles de matrices Exemple ATOM Fonctions utiles glutPostRedisplay(); Fonction qui produit un message à OpenGL que la fenêtre doit être rafraîchie (Voir BOUNCE) glutTimerFunc(temps (msec), (*func)(int nomFunc), int value); Permet de fournir le pointeur sur la fonction nomFunc qui doit être appelée après qu’une période de temps soit écoulée

Piles de matrices Exemple ATOM

Génération du modèle des objets Exemple page 276 (Hill) Classe scene scn.read() scn.drawSceneOpenGL() dans la fonction d ’affichage displaySDL() Langage SDL Model Loading Lesson 31 (NeHe.gamedev.net) Importer des objets en format .ms3d

Génération du modèle des objets Model Loading Lesson 31 (NeHe.gamedev.net) Importer des objets en format .ms3d

Génération du modèle des objets Model Loading Lesson 31 (NeHe.gamedev.net) Structures de données du modèle (voir la classe Model dans le fichier Model.h) Structures associées aux sommets (vertices) // Vertex Structure struct Vertex { char m_boneID; // For Skeletal Animation float m_location[3]; }; // Vertices Used int m_numVertices; Vertex *m_pVertices;

Génération du modèle des objets Model Loading Lesson 31 (NeHe.gamedev.net) Structures de données du modèle (voir la classe Model dans le fichier Model.h) Structures associées aux triangles (triangle) // Triangle Structure struct Triangle { float m_vertexNormals[3][3]; float m_s[3], m_t[3]; // Texture coordinates int m_vertexIndices[3]; }; // Triangles Used int m_numTriangles; Triangle *m_pTriangles;

Génération du modèle des objets Model Loading Lesson 31 (NeHe.gamedev.net) Structures de données du modèle (voir la classe Model dans le fichier Model.h) Structures associées aux treillis (mesh) // Mesh struct Mesh { int m_materialIndex; int m_numTriangles; int *m_pTriangleIndices; }; // Meshes Used int m_numMeshes; Mesh *m_pMeshes;

Génération du modèle des objets Model Loading Lesson 31 (NeHe.gamedev.net) Structures de données du modèle (voir la classe Model dans le fichier Model.h) Structures associées aux propriétés matérielles (material) // Material Properties struct Material { float m_ambient[4], m_diffuse[4], m_specular[4], m_emissive[4]; float m_shininess; GLuint m_texture; char *m_pTextureFilename; }; // Materials Used int m_numMaterials; Material *m_pMaterials;

Génération du modèle des objets Model Loading Lesson 31 (NeHe.gamedev.net) Chargement du modèle (lecture du fichier .ms3d) bool MilkshapeModel::loadModelData( const char *filename ) { ifstream inputFile( filename, ios::in | ios::binary | ios::nocreate ); if ( inputFile.fail()) return false; // "Couldn't Open The Model File."

Génération du modèle des objets Model Loading Lesson 31 (NeHe.gamedev.net) Chargement du modèle (calcul de la dimension du fichier) inputFile.seekg( 0, ios::end ); long fileSize = inputFile.tellg(); inputFile.seekg( 0, ios::beg );

Génération du modèle des objets Model Loading Lesson 31 (NeHe.gamedev.net) Chargement du modèle (lecture du fichier dans un tampon) byte *pBuffer = new byte[fileSize]; inputFile.read( pBuffer, fileSize ); inputFile.close();

Génération du modèle des objets Model Loading Lesson 31 (NeHe.gamedev.net) Chargement du modèle (lecture du header et validation) const byte *pPtr = pBuffer; MS3DHeader *pHeader = ( MS3DHeader* )pPtr; pPtr += sizeof( MS3DHeader ); if ( strncmp( pHeader->m_ID, "MS3D000000", 10 ) != 0 ) return false; // "Not A Valid Milkshape3D Model File."  if ( pHeader->m_version < 3 || pHeader->m_version > 4 ) return false; // "Unhandled File Version. Only Milkshape3D Version 1.3 And 1.4 Is Supported."

Génération du modèle des objets Model Loading Lesson 31 (NeHe.gamedev.net) Chargement du modèle (lecture des sommets) int nVertices = *( word* )pPtr; m_numVertices = nVertices; m_pVertices = new Vertex[nVertices]; pPtr += sizeof( word ); int i; for ( i = 0; i < nVertices; i++ ) { MS3DVertex *pVertex = ( MS3DVertex* )pPtr; m_pVertices[i].m_boneID = pVertex->m_boneID; memcpy( m_pVertices[i].m_location, pVertex->m_vertex, sizeof( float )*3 ); pPtr += sizeof( MS3DVertex ); }

Génération du modèle des objets Model Loading Lesson 31 (NeHe.gamedev.net) Chargement du modèle (lecture des triangles) int nTriangles = *( word* )pPtr; m_numTriangles = nTriangles; m_pTriangles = new Triangle[nTriangles]; pPtr += sizeof( word ); for ( i = 0; i < nTriangles; i++ ) { MS3DTriangle *pTriangle = ( MS3DTriangle* )pPtr; int vertexIndices[3] = { pTriangle->m_vertexIndices[0], pTriangle->m_vertexIndices[1], pTriangle->m_vertexIndices[2] }; float t[3] = { 1.0f-pTriangle->m_t[0], 1.0f-pTriangle->m_t[1], 1.0f-pTriangle->m_t[2] }; memcpy( m_pTriangles[i].m_vertexNormals, pTriangle->m_vertexNormals, sizeof( float )*3*3 ); memcpy( m_pTriangles[i].m_s, pTriangle->m_s, sizeof( float )*3 ); memcpy( m_pTriangles[i].m_t, t, sizeof( float )*3 ); memcpy( m_pTriangles[i].m_vertexIndices, vertexIndices, sizeof( int )*3 ); pPtr += sizeof( MS3DTriangle ); }

Génération du modèle des objets Model Loading Lesson 31 (NeHe.gamedev.net) Chargement du modèle (lecture des treillis) int nGroups = *( word* )pPtr; m_numMeshes = nGroups; m_pMeshes = new Mesh[nGroups]; pPtr += sizeof( word ); for ( i = 0; i < nGroups; i++ ) { pPtr += sizeof( byte ); // Flags pPtr += 32; // Name word nTriangles = *( word* )pPtr; int *pTriangleIndices = new int[nTriangles]; for ( int j = 0; j < nTriangles; j++ ) { pTriangleIndices[j] = *( word* )pPtr; } char materialIndex = *( char* )pPtr; pPtr += sizeof( char ); m_pMeshes[i].m_materialIndex = materialIndex; m_pMeshes[i].m_numTriangles = nTriangles; m_pMeshes[i].m_pTriangleIndices = pTriangleIndices;

Génération du modèle des objets Model Loading Lesson 31 (NeHe.gamedev.net) Chargement du modèle (lecture des propriétés) int nMaterials = *( word* )pPtr; m_numMaterials = nMaterials; m_pMaterials = new Material[nMaterials]; pPtr += sizeof( word ); for ( i = 0; i < nMaterials; i++ ) { MS3DMaterial *pMaterial = ( MS3DMaterial* )pPtr; memcpy( m_pMaterials[i].m_ambient, pMaterial->m_ambient, sizeof( float )*4 ); memcpy( m_pMaterials[i].m_diffuse, pMaterial->m_diffuse, sizeof( float )*4 ); memcpy( m_pMaterials[i].m_specular, pMaterial->m_specular, sizeof( float )*4 ); memcpy( m_pMaterials[i].m_emissive, pMaterial->m_emissive, sizeof( float )*4 ); m_pMaterials[i].m_shininess = pMaterial->m_shininess; m_pMaterials[i].m_pTextureFilename = new char[strlen( pMaterial->m_texture )+1]; strcpy( m_pMaterials[i].m_pTextureFilename, pMaterial->m_texture ); pPtr += sizeof( MS3DMaterial ); } reloadTextures();

Génération du modèle des objets Gestion d’interactions clavier/souris avec OpenGL 3.x. Voir le tutoriel: http://www.opengl-tutorial.org/beginners-tutorials/tutorial-6-keyboard-and-mouse/ Voir le code: http://code.google.com/p/opengl-tutorial-org/source/browse/tutorial06_keyboard_and_mouse/tutorial06.cpp

Génération du modèle des objets Gestion d’interactions clavier/souris avec OpenGL 3.x.: tutorial06.cpp // création de la fenêtre

Génération du modèle des objets Gestion d’interactions clavier/souris avec OpenGL 3.x.: tutorial06.cpp // test de profondeur // test de visibilité

Génération du modèle des objets Gestion d’interactions clavier/souris avec OpenGL 3.x.: tutorial06.cpp

Génération du modèle des objets Gestion d’interactions clavier/souris avec OpenGL 3.x.: tutorial06.cpp

Génération du modèle des objets Gestion d’interactions clavier/souris avec OpenGL 3.x.: tutorial06.cpp // creation de la matrice MVP

Génération du modèle des objets Gestion d’interactions clavier/souris avec OpenGL 3.x.: tutorial06.cpp

Génération du modèle des objets Gestion d’interactions clavier/souris avec OpenGL 3.x.: Vertex Shader

Génération du modèle des objets Gestion d’interactions clavier/souris avec OpenGL 3.x.: Fragment Shader

Génération du modèle des objets Gestion d’interactions clavier/souris avec OpenGL 3.x.: controls.cpp

Génération du modèle des objets Gestion d’interactions clavier/souris avec OpenGL 3.x.: controls.cpp

Génération du modèle des objets Gestion d’interactions clavier/souris avec OpenGL 3.x.: controls.cpp

Génération du modèle des objets Gestion d’interactions clavier/souris avec OpenGL 3.x.: tutorial06.cpp La matrice MVP est calculée à chaque frame

Génération du modèle des objets Gestion d’interactions clavier/souris avec OpenGL 3.x.: controls.cpp, calcul de l’orientation de la caméra Repositionnement de la souris

Génération du modèle des objets Gestion d’interactions clavier/souris avec OpenGL 3.x.: controls.cpp, calcul de l’orientation de la caméra (angle horizontal et vertical)

Génération du modèle des objets Gestion d’interactions clavier/souris avec OpenGL 3.x.: controls.cpp, calcul de l’orientation de la caméra (calcul des axes du système de visualisation)

Génération du modèle des objets Gestion d’interactions clavier/souris avec OpenGL 3.x.: controls.cpp, calcul de l’orientation de la caméra (calcul de la position de la caméra)

Génération du modèle des objets Gestion d’interactions clavier/souris avec OpenGL 3.x.: controls.cpp, calcul de la FOV, matrices de visualisation et de perspective

Génération du modèle des objets Gestion d’interactions clavier/souris avec OpenGL 3.x.: Exécution