Synthèse d images et animation. Estelle Duveau - estelle.duveau@inria.fr. 3A IRV, 24 septembre 2008. OpenGL - Cours 1. Introduction.



Documents pareils
Chapitre II : Infographie et bibliothèques graphiques

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

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

Synthèse d'images. (1) Introduction

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

Introduction au langage C

TP : Gestion d une image au format PGM

.. CSS. Damien Nouvel. Damien Nouvel (Inalco) CSS 1 / 15

Exemples d applications. Qu est ce que l Informatique Graphique? Infographie 2D pour l interaction. Introduction

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

as Architecture des Systèmes d Information

des outils disponibles et des performances possibles

Structurer ses données : les tableaux. Introduction à la programmation

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Rappels Entrées -Sorties

Programmation système I Les entrées/sorties

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

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

UE Programmation Impérative Licence 2ème Année

05/09/2015. M Ponctualité : CM TD TP & Projet Æ En cas d absence : récupérer!!! 3 05/09/2015

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Une introduction à Java


Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

Sillage Météo. Notion de sillage

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

Vers du matériel libre

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

TD3: tableaux avancées, première classe et chaînes

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Programmer en JAVA. par Tama

Généralités sur le Langage Java et éléments syntaxiques.

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

GL BE FLYER. Chef de projet de l équipe : SCIONICO Pierre

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

UE C avancé cours 1: introduction et révisions

Le langage C. Séance n 4

Le prototype de la fonction main()

TP SIN Traitement d image

TP1 : Initiation à Java et Eclipse

Programmation en C. École Nationale Supérieure de Techniques Avancées. Pierre-Alain Fouque et David Pointcheval

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

Cours 1: Java et les objets

Initiation à l algorithmique

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Claude Delannoy. 3 e édition C++

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

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

Structure d un programme

GPGPU. Cours de MII 2

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

COMPARAISONDESLANGAGESC, C++, JAVA ET

Chap III : Les tableaux

TP 1. Prise en main du langage Python

Les algorithmes de base du graphisme

Introduction à la Programmation Parallèle: MPI

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Programmation en Java IUT GEII (MC-II1) 1

PROGRAMMATION PAR OBJETS

Cours d Algorithmique et de Langage C v 3.0

Cahier des charges. driver WIFI pour chipset Ralink RT2571W. sur hardware ARM7

Introduction à MATLAB R

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

Programmation impérative

Algorithmique et Programmation, IMA

Rapport de Projet Béatrice Frey et Cyril Crassin Printemps Projet Fourmis. Université de Technologie de Belfort-Montbéliard

Initiation à la librairie graphique VTK

PROJET DE MODELISATION CASERNE SERGEANT BLANDAN

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Solutions du chapitre 4

Architecture des ordinateurs

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

Plan du cours Cours théoriques. 29 septembre 2014

SUPPORT DE COURS. Langage C

Analyse de la vidéo. Chapitre La modélisation pour le suivi d objet. 10 mars Chapitre La modélisation d objet 1 / 57

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

TP, première séquence d exercices.

Rendu temps réel de mer et de nuages

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Logiciel de Base. I. Représentation des nombres

TP Blender n 3 : Luxrender : Rendu d une scène d extérieur

Bases de programmation. Cours 5. Structurer les données

ALGORITHMIQUE ET PROGRAMMATION En C

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Introduction à l algorithmique et à la programmation M1102 CM n 3

Informatique Générale

RIE LE RENDU THEO. 2 e trim ÉTAPE DE FINITION BOÎTE DE DIALOGUE. remarques

OS Réseaux et Programmation Système - C5

Maple: premiers calculs et premières applications

Gnuplot. Chapitre Lancer Gnuplot. 3.2 Options des graphes

Rendu HDR et illumination par image

Transcription:

Synthèse d images et animation OpenGL - Estelle Duveau - estelle.duveau@inria.fr 3A IRV, 24 septembre 2008

Planning Cours : introduction à OpenGL - 24/09/2008 (1h30) Cours : OpenGL avancé - 01/10/2008 (1h30) TP1 : découverte et affichage - 08/10/2008 (1h30) TP2 : découverte et affichage - 15/10/2008 (1h30) TP3 : utilisation des textures - 05/11/2008 (1h30) TP4 : animation de personnages + TP5 : modèles physiques de base - 19/11/2008 (3h) TP6 : modèles physiques avancés - 26/11/2008 (1h30) Projet - semaine du 1er décembre (2 jours)

Plan 1 2 3 4 5

Références D. Shreiner, M. Woo, J. Neider, T. Davis OpenGL Programming Guide alias le red book http://opengl-redbook.com

Plan 1 2 3 4 5

C est quoi? Une API (Application Programming Interface) pour l architecture graphique Indépendant de l architecture Développée en 1989 (GL) par Silicon Graphics, portée sur d autres architectures en 1993 (OpenGL) Comprend environ 250 commandes

OpenGL ne fait pas tout Pas de commande pour créer ou gérer un viewer Pas de commande haut-niveau pour gérer les objets : seulement 3 types de primitives géométriques (points, lignes, polygones) besoin de bibliothèques complémentaires : GLU : opengl Utility library routines de base, création de modèles 3D un peu plus compliqués GLUT : opengl Utility Toolkit gestion de la fenêtre

Exemple d utilisation de GLUT int main(int argc, char** argv){ glutinit(&argc,argv); glutinitdisplaymode(glut SINGLE GLUT RGB); glutinitwindowsize(250,250); glutinitwindowposition(100,100); glutcreatewindow("hello"); // pas encore affichée init(); // à définir avec OpenGL glutdisplayfunc(display); // exécute display // (à définir, OpenGL) glutmainloop; // C est parti! Fenêtre affichée return 0; // Langage C }

Pipeline graphique Pipeline de base : 1 Construction des formes à partir de primitives géométriques (avant Modeling transformations) 2 Arrangement des objets dans l espace 3D et sélection du point de vue (Modeling transformations + Viewing transformation) 3 Calcul des couleurs des objets (lumière, texture...) (Illumination) 4 Rasterization : conversion en image 2D (Scan conversion) Autres opérations possibles : élimination des parties cachées, opérations sur les pixels...

Rappel du vocabulaire Rendu : processus de création d images 2D à partir de modèles 3D Modèles : construits à partir de primitives géométriques définies par leurs sommets (vertex/vertices) Bitplane : zone de la mémoire contenant un bit d information pour chaque pixel de l image Framebuffer : zone de la mémoire réunissant l ensemble des bitplanes

Exemple de base # include <WhateverYouNeed.h> main () { InitializeAWindowPlease(); // Pas OpenGL glclearcolor(0.0,0.0,0.0,0.0); // Couleur d init. glclear(gl COLOR BUFFER BIT); // Initialiser la couleur glcolor3f(1.0,1.0,1.0); // Couleur de dessin glortho(0.0,1.0,0.0,1.0,-1.0,1.0); // Syst. de coord. glbegin(gl POLYGON); // Dessinons un polygone glvertex3f(0.25,0.25,0.0); glvertex3f(0.75,0.25,0.0); // Coordonnées des glvertex3f(0.75,0.75,0.0); // sommets du polygone glvertex3f(0.25,0.75,0.0); glend(); glflush(); // Exécute les commandes tout de suite UpdateTheWindowAndCheckForEvents(); // Pas OpenGL }

Résultat

Eléments de syntaxe OpenGL glcolor3f(1.0,1.0,1.0); gl : commande OpenGL (les constantes OpenGL commencent par GL : GL COLOR BUFFER BIT) 3 : cette commande a 3 arguments f : les arguments sont des flottants glcolor3fv(color array); Le paramètre est un vecteur (ou tableau) de 3 flottants (GLfloat color array[] = { 1.0,0.0,0.0 } ; )

Suffixes et types OpenGL b entier (8 bits) signed char GLbyte s entier (16 bits) short GLshort i entier (32 bits) int ou long GLint f flottant (32 bits) float GLfloat d flottant (64 bits) double GLdouble ub entier non signé (8 bits) unsigned char GLubyte us entier non signé (16 bits) unsigned long GLushort ul entier non signé (32 bits) unsigned int ou long GLuint

Machine à états Etats/modes actifs jusqu à ce qu on les change Exemples : couleur courante point de vue mode de dessin des polygones position et caractéristiques des sources de... Activation/Désactivation : glenable(gl LIGHTING); gldisable(gl COLOR MATERIAL);

Plan 1 2 3 4 5

Primitives de base 1 Sommets (vertices) : vecteur de flottants 2 Lignes : segments 3 Polygones : polygones convexes simples

Exemple : pentagone plan glbegin(gl POLYGON); glvertex2f(0.0, 0.0); glvertex2f(0.0, 3.0); glvertex2f(4.0, 3.0); glvertex2f(6.0, 1.5); glvertex2f(4.0, 0.0); glend();

Ensemble des primitives géométriques

Paramètres supplémentaires Taille des sommets (en pixels) : glpointsize(2.0); Epaisseur des lignes (en pixels) : gllinewidth(3.0); Connaître valeurs courantes : glgetfloatv(gl LINE WIDTH); Dessin des lignes : on peut préciser de nombreux motifs de pointillés Le rendu des faces avant et arrière d un polygone peut être différent :glpolygonmode(gl FRONT,GL FILL); glpolygonmode(gl BACK,GL LINE); Culling : glcullface(gl BACK); : l arrière des faces n est pas visible On peut préciser la couleur, la normale aux sommets,...

Les normales glbegin(gl POLYGON); glnormal3fv(n0); glvertex3fv(v0); glnormal3fv(n1); glvertex3fv(v1); glnormal3fv(n2); glvertex3fv(v2); glend(); Attention à l ordre : normale avant coordonnées

Comment ne tracer qu une partie d un contour très utile pour tracer un polygone non convexe glpolygonmode(gl FRONT AND BACK,GL LINE); glbegin(gl POLYGON); gledgeflag(gl TRUE); gvertex3fv(v0); gledgeflag(gl FALSE); gvertex3fv(v1); gledgeflag(gl TRUE); gvertex3fv(v2); glend(); le sommet suivant est/n est pas le début d un bord

Résultat

Tableaux de sommets Un tableau par type de données : coordonnées, normale, couleur, texture,... Création d un tableau : glenableclientstate(gl NORMAL ARRAY); Utilisation d un tableau : glcolorpointer(3,gl FLOAT,5*sizeof(GLfloat),color); stride = offset (en octets) entre 2 données consécutives Accès à un élément glarrayelement(0); se fait dans tous les tableaux activés Accès à plusieurs éléments : gldrawelements(gl POLYGON,5,GL UNSIGNED INT,vertices); Aussi glmultidrawelements(...), gldrawrangeelements(...), etc.

Exemple 1/2 static GLint vertices[] = { 25, 25, 100, 325, 175, 25, 175, 325, 250, 25, 325, 325 }; static GLfloat colors[] = { 1.0, 0.2, 0.2, 0.2, 0.2, 1.0, 0.8, 1.0, 0.2, 0.75, 0.75, 0.75, 0.35, 0.35, 0.35, 0.5, 0.5, 0.5 }; glenableclientstate(gl COLOR ARRAY); glenableclientstate(gl VERTEX ARRAY); glcolorpointer(3, GL FLOAT, 0, colors); glvertexpointer(2, GL INT, 0, vertices);

Exemple 2/2 // Création d un triangle à partir de trois sommets quelconques glbegin(gl TRIANGLES); glarrayelement(2); glarrayelement(3); glarrayelement(5); glend(); // Création d un triangle à partir des trois premiers sommets gldrawelements( GL TRIANGLES,3,GL UNSIGNED SHORT,vertices);

Un exemple concret : dessiner un cube

Un exemple concret : dessiner un cube static GLubyte fronti[] = { 4, 5, 6, 7 }; static GLubyte righti[] = { 1, 2, 6, 5 }; static GLubyte bottomi[] = { 0, 1, 5, 4 }; static GLubyte backi[] = { 0, 3, 2, 1 }; static GLubyte lefti[] = { 0, 4, 7, 3 }; static GLubyte topi[] = { 2, 3, 7, 6 }; gldrawelements(gl QUADS,4,GL UNSIGNED BYTE,frontI); gldrawelements(gl QUADS,4,GL UNSIGNED BYTE,rightI); gldrawelements(gl QUADS,4,GL UNSIGNED BYTE,bottomI); gldrawelements(gl QUADS,4,GL UNSIGNED BYTE,backI); gldrawelements(gl QUADS,4,GL UNSIGNED BYTE,leftI); gldrawelements(gl QUADS,4,GL UNSIGNED BYTE,topI);

Plan 1 2 3 4 5

Voir en 3D Modeling transformations : repère objet repère monde Viewing transformations : repère monde repère caméra Projection sur matrices 4x4

Manipuler les matrices 4x4 sous OpenGL glmatrixmode(gl MODELVIEW) ou GL PROJECTION ou GL TEXTURE Matrice courante : en général la matrice MODELVIEW, sauf lorsqu on doit modifier les paramètres intrinsèques de la caméra glloadidentity() glloadmatrixf(m), glloadtransposematrixd(n) glmultmatrixd(p), glmulttransposematrixf(q) gltranslatef(1.0,2.0,-1.5) glrotated(90.0,0.0,1.0,0.0) glscalef(2.0,-0.5,1.0)

Changer le mode : GL PROJECTION Manipuler la matrice PROJECTION glfrustrum(left,right,bottom,top near,far ) glortho(left,right,bottom,top near,far )

Piles de matrices Toutes les opérations se font sur la matrice courante, or nécessité de manipuler plusieurs matrices deux piles de matrices (une pour MODELVIEW, une pour PROJECTION) La matrice courante est la matrice du haut de la pile glpushmatrix(), glpopmatrix()

Piles de matrices - Exemple

Plan 1 2 3 4 5

Gestion des couleurs 2 modes de gestion des couleurs : RGBA ou color index (tableau de couleurs prédéfinies) RGBA : glcolor4ub(1.0,0.0,0.5) Color index : glindexi(50) Flat shading : glshademodel(gl FLAT) ; Gouraud shading : glshademodel(gl SMOOTH)

Gestion des couleurs en mode RGBA Rappel commande : glcolor3f(1.0,0.0,0.5) glenable(gl COLOR MATERIAL) pour activer le coloriage glenable(gl DEPTH TEST) pour ne pas afficher les parties cachées Ne pas oublier : glclear(gl COLOR BUFFER BIT GL DEPTH BUFFER BIT) pour réinitialiser le color buffer et le Z-buffer à chaque fois qu on redessine (gestion des buffers : cf. prochain cours)

Lumière : création des sources Initialisation : Activer l éclairage : glenable(gl LIGHTING) Allumer une lumière : glenable(gl LIGHT0) attention, trop de atténue les performances gllightfv(gl LIGHT0, GL AMBIENT, l ambient) Argument 1 : nom de la source (GL LIGHT0... GL LIGHT7) Argument 2 : type de lumière (GL AMBIENT, GL DIFFUSE, GL SPECULAR,... ) Argument 3 : intensité RGBA de la lumière

Cas particuliers 1/2 Cas particulier 1 : Argument 2 = GL POSITION, Argument 3 = (x, y, z, w) si w = 0 : lumière directionnelle, (x, y, z) = direction sinon : lumière ponctuelle, (x, y, z) = position dans le repère de l objet

Cas particuliers 2/2 Cas particulier 2 : Argument 2 = GL * ATTENUATION change les constantes du facteur d atténuation 1 k c +k l d+k qd 2 Cas particulier 3 : spots Argument 2 = GL SPOT CUTOFF, Argument 3 = demi-angle du cône Argument 2 = GL SPOT DIRECTION, Argument 3 = direction dans le repère de l objet

Matériaux des objets glmaterialfv(gl FRONT,GL AMBIENT,mat ambient) Permet de modifier les paramètres du matériau courant : couleur ambiante/diffuse/spéculaire, brillance,... glcolormaterial(gl FRONT AND BACK,GL DIFFUSE) Besoin de glenable(gl COLOR MATERIAL) Attention! Pas entre glbegin() et glend() Utile pour changer un seul paramètre de matériau avec glcolor(...) Ne pas oublier gldisable(gl COLOR MATERIAL) ensuite pour ne pas avoir de surprises et de problèmes de performance

Plan 1 2 3 4 5

Nous avons vu : fonctionnement général modélisation : primitives géométriques modélisation : transformations repères rendu : couleurs rendu : rendu : matériaux

Ce qu il faut retenir: Machine à états GL MODELVIEW, GL PROJECTION le redbook

Prochain cours : blending, antialiasing, autres effets display lists textures buffers OpenGL interactivité