Synthèse d'images 000

Documents pareils
TPs Architecture des ordinateurs DUT Informatique - M4104c SUJETS. R. Raffin Aix-Marseille Université romain.raffin-at-univ-amu.fr

M2-Images. Rendu Temps Réel - OpenGL 4 et compute shaders. J.C. Iehl. December 18, 2013

Rendu temps réel de mer et de nuages

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

Synthèse d'images I. Venceslas BIRI IGM Université de Marne La

Virtual Universe aperçu numéro 1

Développement d un moteur de jeu vidéo pour la console Nintendo Wii U et portage d un jeu

Introduction à CUDA.

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Imagerie Numérique Synthèse d images. DUT Informatique Sébastien THON

des outils disponibles et des performances possibles

Chapitre II : Infographie et bibliothèques graphiques

GPGPU. Cours de MII 2

Rappels Entrées -Sorties

HMI target Visu / PLC HMI. Pour réaliser une interface homme machine avec PLC control

Perspectives en matière de portails géographiques et de 3D

Vers du matériel libre

COLLEGE ADRIEN CERNEAU

Introduction au calcul parallèle avec OpenCL

THEME 1 : L ORDINATEUR ET SON ENVIRONNEMENT. Objectifs

GMIN 330 Nancy Rodriguez

AUVRAY Clément (168187) HOMBERGER Alexandre (186897) GLADE. Langages, outils et méthodes pour la programmation avancée Page 1 sur 12

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

ndv access point : Utilisation

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Une bibliothèque de templates pour CUDA

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/ Vue générale 2 - Mon premier programme 3 - Types de Programme Java

Architecture générale des interfaces graphiques. IHM: Fondements des Interfaces Graphiques. Applications. Outils de construction d interfaces

ACTIVITÉ DE PROGRAMMATION

L51W Guide de l application

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Journée CUME 29 Mars Le déport d affichage. Vincent Gil-Luna Roland Mergoil.

Le langage C. Séance n 4

Rendu HDR et illumination par image

Gestion de scène pour les moteurs 3D

Introduction au langage C

Plan du cours. Historique du langage Nouveautés de Java 7

WINDOWS Remote Desktop & Application publishing facile!

TP1 : Initiation à Java et Eclipse

Bases Java - Eclipse / Netbeans

ALERT NOTICE D UTILISATION DU DRIVER PC-TEXTE

Education Delivery Intelligent Tool

Hiérarchie matériel dans le monde informatique. Architecture d ordinateur : introduction. Hiérarchie matériel dans le monde informatique

RESPONSIVE DESIGN : Comment offrir à vos sites une adaptabilité parfaite?

Choisir le bon ordinateur. et la bonne imprimante en avec. Les prix bas, la confiance en plus

Utilisation de l éditeur.

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

PC, Tablette, Smartphone, comment choisir ce qui me convient le mieux?

Eternelle question, mais attention aux arnaques Question qui est souvent mise en premier plan => ce n est pas une bonne idée

AutoForm plus R6 : Besoins systèmes

Modélisation de la vision humaine

µrv : Realité Virtuelle

Qui ont toujours à mon côté pour me soutenir et me guider au long de ce projet.

Interfaces graphiques avec l API Swing

Sélection du contrôleur

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

SmartCaisse, depuis Prise de Commande IPhone, IPad (2, 3 et mini), IPod et tablette Android SmartCaisse

Programmation système I Les entrées/sorties

Ce dont nous avons besoin pour suivre ce tutorial :

Introduction à Windows 8

Programmation C. Apprendre à développer des programmes simples dans le langage C

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Problèmes liés à la concurrence

L'accélération 3D sous Linux

point On obtient ainsi le ou les points d inter- entre deux objets».

Séance 0 : Linux + Octave : le compromis idéal

TVTools Cloud Edition

I00 Éléments d architecture

1) Installation de Dev-C++ Téléchargez le fichier devcpp4990setup.exe dans un répertoire de votre PC, puis double-cliquez dessus :

as Architecture des Systèmes d Information

Rappels d architecture

Windows 7 - Installation du client

Programmer en JAVA. par Tama

TRUCS & ASTUCES SYSTEME. 1-Raccourcis Programme sur le Bureau (7)

RN2-Programmation Orientée Objet - JAVA CH 1 Introduction à la POO et Java

PIC EVAL Dev Board PIC18F97J60

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Mise en scène d un modèle dans l espace 3D

ESPACE MULTIMEDIA DU CANTON DE ROCHESERVIERE

Anne Tasso. Java. Le livre de. premier langage. 6 e édition. Groupe Eyrolles, 2000, 2002, 2005, 2006, 2008, 2010, ISBN :

TP, première séquence d exercices.

Tivoli Endpoint Manager Introduction IBM Corporation

MANUEL D UTILISATION PRO-FACE

Le programme détaillé. Salle A07 Salle A06 Salle A04. Initiation à DirectX. Création de Mods Minecraft

La programmation orientée objet et le langage C++

Génération de code binaire pour application multimedia : une approche au vol

Des solutions adaptées à l éducation

EIP 2012 Projet Livepad. Documentation technique 1.5

PROJET DE MODELISATION CASERNE SERGEANT BLANDAN

Les structures. Chapitre 3

Support de TD ArcGIS Introduction à l automatisation et au développement avec ArcGIS 10.1 JEAN-MARC GILLIOT e année ingénieur

Pré-requis installation

Création d'une interface graphique

Notions fondamentales du langage C# Version 1.0

SOMMAIRE. Présentation assistée sur ordinateur. Collège F.Rabelais 1/10

Bases de données cours 1

Couplage d une base de données documentaire à une visualisation interactive 3D sur l Internet

Transcription:

Synthèse d'images 000

Affichage 3D Données 3D Caméra fichier description utilisateur Résultat: écran 001

Affichage 3D Données 3D Caméra Ordre de grandeurs: fichier description utilisateur Objets 3D: 100-10 5 triangles Résultat: écran 1 Triangle ~3000 pixels 25 images par secondes Affichage 3D = calcul intensif 002

Historique 1ere 3D (années 70-80) Supercalculateurs 80-90 Fin 90 Architecture dédiée (3D "cablée") Cartes vidéo 3D 003

Historique Début 2000 Apparition des cartes graphiques Programmation 3D possible sur un PC standard Langage proche de l'assembleur 004

Historique GPU vs CPU 2013 Language de programmation parallèle. GPGPU http://michaelgalloy.com/ Crytek Engine Skyrim 005

Communication avec GPU CPU+RAM GPU + VRAM Code standard API de programmation écran 2 API principales: - OpenGL - Direct3D 006

OpenGL - Un ensemble de spécifications (cahier des charges) sous forme d'api pour communiquer avec la carte graphique - Possède plusieurs implémentations suivant la carte graphique et les drivers - Version revendeur: NVIDIA, ATI, Intel - Mesa3D (implémentation logicielle libre) - OpenGL ES pour Android / iphone - Consoles: Wii, PS3, DS - Bibliothèque de fonctions C Nombreux wrappers Sources: David Odin 007

Programmation 3D Etape 1: Afficher une fenêtre (indépendant d'opengl) Ma Fenêtre Etape 2: Démarrer un contexte OpenGL dans cette fenêtre Boutons Etape 3: Appeler le code OpenGL dans une boucle permanente 008

Programmation 3D Etape 1: Afficher une fenêtre (indépendant d'opengl) Ma Fenêtre Boutons Il faut donc un gestionnaire de fenêtres & evenements Plusieurs choix: - Glut (simple, léger, limité) - SDL (spécialisé pour les jeux) - GLFW (léger, récent) - GTK (gestionnaire générique fenêtre & évènements) - Qt (gestionnaire générique, très complet, lourd) -... 009

Utilisation de GLUT GLUT - The OpenGL Utility Toolkit Un gestionnaire de fenêtre dédié pour OpenGL Pour compiler: g++ pgm.c -lgl -lglu -lglut -lglew Sous Linux: Installer les packages de freeglut, Glew 010

Fonction d'affichage Pour afficher quelque chose glname : Fonction OpenGL glclearcolor(r,g,b,a) : Couleur d'effacement de l'écran glclear() : Efface l'écran (+ tampon profondeur) glutswapbuffers() : Echange tampon/affichage fonction liée à glut 011

Callback GLUT récupération touches clavier Fonction à appeler 012

Callback GLUT (mouse) Récupération des informations du click souris Evènements par "callback" = fonction utilisateur appelée lors d'un évènement 013

Callback GLUT Autres évènements possibles: glutreshapefunc glutkeyboardfunc glutspecialfunc glutmousefunc glutmotionfunc gluttabletbuttonfunc glutidlefunc gluttimerfunc (redimentionnement de fenêtre) (appui clavier) (touches spéciales du clavier: flêches) (clic souris) (déplacement souris) (appui bouton tablette) (lorsque rien ne se passe) (appel au bout d'un temps donné) http://www.opengl.org/resources/libraries/glut/spec3/spec3.html 014

Appels OpenGL Principe général Initialisation - Définition des données float T[500];... T[5]=7.5; - Envoi des données sur GPU glbufferdata(...) 1x Boucle d'affichage - Pointer vers les données à afficher (sur GPU) glbindbuffer(...) - Demande d'affichage gldrawelements(...) >25x/s 015

Rendu par projection 016

Pgm minimal, caméra partie visible z near z far 017

Pgm minimal, triangle 018

Pgm minimal, triangle Position vbo 0 0 0 1 0 0 0 1 0 en RAM glbufferdata() 0 0 0 1 0 0 0 1 0 sur GPU 019

Pgm minimal, triangle Buffer courant: vbo 0 0 0 1 0 0 0 1 0 gldrawarrays() Affiche (0,1,0) (0,0,0) (1,0,0) 020

Modes affichages gldrawarrays(glenum mode, GLint first, GLsizei count); glpointsize(5); gldrawarrays(gl_points,0,n); gldrawarrays(gl_lines,0,n); gldrawarrays(gl_lines_loop,0,n); gldrawarrays(gl_lines_strip,0,n); 021

Interaction, rotation int main() Variables globales glutspecialfun(special_callback); static void display_callback() glrotatef(rotation_1, 1,0,0); glrotatef(rotation_2, 0,1,0); 022

Rem. fonctions OpenGL L'API d'opengl est en C: 1 nom par types d'arguments gl[nom]f(...); gl[nom]i(...); gl[nom]u(...); gl[nom]d(...); gl[nom]vf(...); ex. gltranslatef(...) gluniform1f(...) gl[nom]3f(...); gl[nom]2u(...); 023

Notion de shaders Programme en C, C++, etc Sur CPU Sur GPU 2 programmes de contrôles int main() {... Création des données Vertex Shader appelé pour tous les sommets projection position Envoie sur GPU Demande d'affichage Gestion évènements Fragment Shader appelé pour tous les "pixels colorés" couleurs pixels 024

Shaders en pratique Créez 2 fichiers textes: shader.vert shader.frag Chargez les fichiers dans le programme principal glcreateprogram(); glcreateshader(...); glshadersource(...); glcompileshader(...); glattachshader(...); gllinkprogram(...); gluseprogram(...); 025

Shaders en pratique Ressemble à du C shader.vert Applique transformation projective & monde Variable déjà connue position de sortie des sommets 026

Shaders en pratique Ce n'est pas du C Ressemble à du C++ => C'est du GLSL shader.frag Variable de sortie: couleur du pixel Contrôle de la couleur 027

Notions de GLSL Langage proche du C, et C++ en plus simple Possède les éléments de calculs int float vec2(x,y); vec3(x,y,z); vec4(x,y,z,w); vec3 a(1,4,3); vec2 b=a.xy; vec2 c=a.zx; vec2 c=vec2(a.y,4); mat2(); mat3(); mat4(); 028

Principe interpolation 029

Passage d'arguments varying interpolation (0,1,0) (0,0,0) (1,0,0) 030

Passage d'arguments uniform Il est possible de passer des paramètres du CPU vers les shaders display_callback() shader.frag() 031

Passage d'arguments uniform Utilisation: - Interaction clavier, souris - Temps gluniform1f (get_uni_loc(shader, string), value); 1u 2f 3d Matrix4fv... 032

Maillages a d b c float vertex[]= {xa,ya,za, xb,yb,zb, xd,yd,zd, xb,yb,zb, xc,yc,zc, xd,yd,zd, xc,yc,zc, xd,yd,zd, xa,ya,za, xa,ya,za, xb,yb,zb, xc,yc,zc}; glbufferdata(...) Répétition: - perte de place - modification complexe 033

Maillages, format indexé p 3 Séparation: géométrie 3D / connectivité p 0 p 1 p 2 float vertex[]= {p 0 x,p 0 y,p 0 z, p 1 x,p 1 y,p 1 z, p 2 x,p 2 y,p 2 z, p 3 x,p 3 y,p 3 z}; float indices[]= {0,1,3, 1,2,3, 0,3,2, 0,2,1}; 2 Types de buffers sur le GPU Buffer de géométrie Buffer d'indices p 0 x p 0 y p 0 z p 1 x... 0 1 3 1 2 3 0... float unsigned int + Coordonnées écrites une seule fois 034

Format indexé Initialisation Affichage 035

Entrelacement de données On souhaite envoyer au GPU: 4 Sommets géométrie (x,y,z) couleur (r,g,b) donnees: [p0,c0,p1,c1,p2,c2,p3,c3] p 3 c 3 3 floats 3 floats p 2 c 2 p 0 c 0 p 1 c 1 036

Entrelacement de données Init Display 037

Entrelacement de données Init Display position (float) couleur (float) sizeof(float)x 0 1 2 3 4... p 0 x p 0 y p 0 z c 0 r c 0 g c 0 b p 1 x... Vertex Ptr Color Ptr Buffer courant (VBO) offset_couleur décallage (stride) 038

Autre possibilité VBO Courant p 0 x p 0 y p 0 z p 1 x... c 0 r c 0 g c 0 b... Vertex Ptr Color Ptr 039

Autre possibilité Init Display 040

Autre possibilité Init Display VBO position p 0 x p 0 y p 0 z p 1 x... VBO couleur Vertex Ptr c 0 r c 0 g c 0 b... Color Ptr 041

Illumination 042

Normale par sommet/triangle 043

Illumination Phong/Gouraud 044

Textures 045

Format de fichiers OFF 8 6 12 0 0 0 1 0 0 0 1 0 0 0 1 1 1 0 1 0 1 0 1 1 1 1 1 4 0 1 4 2 4 1 5 7 4 4 3 6 7 5 4 2 6 3 0 4 2 4 7 6 4 0 3 5 1 v 0 0 0 v 1 0 0 v 0 1 0 v 0 0 1 v 1 1 0 v 1 0 1 v 0 1 1 v 1 1 1 f 1 2 5 3 f 2 6 8 5 f 4 7 8 6 f 3 7 4 1 f 3 5 8 7 f 1 4 6 2.off.obj 046