50
Chapitre IV : Les textures Programmation 3D Fabrice Aubert fabrice.aubert@lifl.fr Licence/Master USTL - IEEA 2008-2009 F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 1 / 50

Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

  • Upload
    others

  • View
    8

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Chapitre IV : Les texturesProgrammation 3D

Fabrice [email protected]

Licence/MasterUSTL - IEEA

2008-2009

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 1 / 50

Page 2: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

1 Introduction

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 2 / 50

Page 3: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Ameliorer le realisme

L’eclairement est insuffisant :

« Texturer »les polygones (murs, sols, peau, ...).Inscruster des photos (tableaux, decors de fond,...).⇒ Les textures sont primordiales

Les textures sont utiles pour de nombreux effets :

Eclairement (Lightmap pour le speculaire, images precalculees,...).Ombres portees (depth-map)Reliefs (bumpmap : textures de normales)...

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 3 / 50

Page 4: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Definition (intuitive)

Une texture est une « image », c’est a dire une grille de pixels.Les pixels de la texture sont appeles texels (pour les differencier despixels de l’ecran graphique).Chaque texel est localise dans la texture par ses coordonnees s et t.Toute l’image de la texture est decrite par s ∈ [0, 1] et t ∈ [0, 1]

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 4 / 50

Page 5: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Plan

1 Texturer les objets (ou plaquer les textures)

2 Initialisation et parametrisation des textures

3 Aliassage

4 Generation automatique des coordonnees de texture

5 Pour aller plus loin...

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 5 / 50

Page 6: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

2 Texturer les objets (ou plaquer lestextures)

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 6 / 50

Page 7: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Application de la texture

Consiste a associer a chaque point affiche un texel (donne au point sacouleur).

L’association se fait simplement en indiquant (ou en calculant) lescoordonnees (s, t) du texel voulu.

En OpenGL, l’association se fait seulement aux sommets.

Lors du remplissage des polygones, chaque pixel est associe a un texelpar interpolation des coordonnees de textures des sommets (calculincremental des coordonnees de texture lors de la rasterization).

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 7 / 50

Page 8: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Methodes de placage

Specifier « a la main »les coordonnees de textures pour chaquesommet.

Instruction glTexCoord2f(s, t).

Calculer automatiquement ces coordonnees par projection lineaire(plan mapping)

Calculer automatiquement ces coordonnees par projection spherique(environment mapping)

(les deux types de generation automatique sont donnes a la fin du cours).

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 8 / 50

Page 9: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Avec glTexCoord

g l B e g i n (GL POLYGON ) ;g l T e x C o o r d 2 f ( 0 , 0 ) ; // Le p r o c h a i n sommet s e r a

// a f f e c t e avec c e s c o o r d o n n e e s// de t e x t u r e

g l V e r t e x 3 f v (V0 ) ;g l T e x C o o r d 2 f ( 1 , 0 ) ;g l V e r t e x 3 f (V1 ) ;g l T e x C o o r d 2 f ( 1 , 1 ) ;g l V e r t e x 3 f (V2 ) ;g l T e x C o o r d 2 f ( 0 , 1 ) ;g l V e r t e x 3 f (V3 ) ;

g lEnd ( ) ;

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 9 / 50

Page 10: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Liberte sur les coordonnees de texture

g l B e g i n (GL POLYGON ) ;g l T e x C o o r d 2 f ( 0 . 5 , 0 . 2 ) ;g l V e r t e x 3 f (V0 ) ;g l T e x C o o r d 2 f ( 1 , 0 . 3 ) ;g l V e r t e x 3 f (V1 ) ;g l T e x C o o r d 2 f ( 0 . 8 , 0 . 8 ) ;g l V e r t e x 3 f (V2 ) ;g l T e x C o o r d 2 f ( 0 . 5 , 1 ) ;g l V e r t e x 3 f (V3 ) ;

g lEnd ( ) ;

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 10 / 50

Page 11: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Placage libre 2

⇒ Repetition de la texture

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 11 / 50

Page 12: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Autre exemple

i n t n b p a r a l l e l e =20;double p a s a n g l e =3.14159/( f l o a t ) n b p a r a l l e l e ;double a n g l e =0.0 ;g l B e g i n ( GL QUAD STRIP ) ;f o r ( i n t i =0; i<n b p a r a l l e l e ; i ++) {

double x , z ;x=cos ( a n g l e ) ;z=s i n ( a n g l e ) ;g l T e x C o o r d 2 f ( a n g l e / 6 . 2 4 , 0 ) ;g l V e r t e x 3 f ( x ,−2 , z ) ;g l T e x C o o r d 2 f ( a n g l e / 6 . 2 4 , 1 ) ;g l V e r t e x 3 f ( x , 2 , z ) ;a n g l e+=p a s a n g l e ;

}glEnd ( ) ;

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 12 / 50

Page 13: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Remarques

Liberte totale sur les coordonnees de textures

Coordonnees pas toujours evidentes a determiner

⇒ Determination par surface intermediaire⇒ Placage par projection (vu plus loin dans ce cours)

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 13 / 50

Page 14: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

3 Initialisation et parametrisation destextures

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 14 / 50

Page 15: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Creation et texture courante

Creer de nouveaux identifiants (pour de nouvelles textures) :glGenTextures(<nb identifiants a reserver>,<GLuint ∗ identifiant>)

Exemple : creation d’un identifiant :

GLuint t e x i d ; // e q u i v a l e n t a u n s i g n e d i n tg l G e n T e x t u r e s (1 ,& t e x i d )

Indiquer la texture courante par son identifiant :glBindTexture(GL TEXTURE 2D,tex id)

⇒ Toutes les instructions concernant les textures 2D (associationd’une image, modification des parametres, placage, coordonnees detexture,...) s’adresseront alors a tex id .

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 15 / 50

Page 16: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Associer une image a une texture

Consiste a associer un tableau de texels a l’identifiant courant.

// format memoire des mots e t t a b l e a u x ( t e c h n i q u e . . . )g l P i x e l S t o r e i (GL UNPACK ALIGNMENT , 1 ) ;// i n s t r u c t i o n d ’ a s s o c i a t i o n au t a b l e a u image (9 p a r a m e t r e s )glTexImage2D (

GL TEXTURE 2D , // t e x t u r e 2D (= image )0 , // n i v e a u de mipmap ( vu p l u s l o i n )3 , // l e t a b l e a u e s t a i n t e r p r e t e r par ”paquet ” de

// t r o i s v a l e u r s c o n s e c u t i v e swidth , h e i g h t , // t a i l l e en p i x e l s de l ’ image0 , // g e s t i o n des b o r d s pour r e c o l l e m e n t

// ( dans ce c o u r s = 0)GL RGB , // i n t e r p r e t a t i o n par OpenGL ( image s e r a

// s t o c k e e en v a l e u r s de Rouge , Vert , Bleu )GL UNSIGNED BYTE , // format du t a b l e a u ( i c i u n s i g n e d b y t e )image ) ; // l ’ image ( t a b l e a u c o n t e n a n t l e s t e x e l s ) .

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 16 / 50

Page 17: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Parametrisation

Plusieurs instructions permettent de specifier des parametres de« placage »Exemples :

Calcul du fragment destination :glTexEnvf(GL TEXTURE ENV,GL TEXTURE ENV MODE,GL DECAL);

GL REPLACE : la couleur est la couleur du texel.GL DECAL : decalcomanie (exploite l’alpha pour la transparence).GL MODULATE : mixer avec la couleur d’eclairement (melange).

Repetition :glTexParameterf(GL TEXTURE 2D,GL TEXTURE WRAP S,GL CLAMP);

GL CLAMP : pas de repetition de la texture sur sGL REPEAT : avec repetition sur s

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 17 / 50

Page 18: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Remarques

Le tableau image peut etre construit a la main, mais generalementprovient d’un fichier (utilisation de OpenIL dans les tps :http://openil.sourceforge.net/).

Contrainte : la taille des images doit etre en puissance de 2 (64x128,16x16, ...).

Si plusieurs textures : ne pas recharger (glTexImage2D) les textures achaque fois (il suffit d’indiquer par glBindTexture l’identifiant de latexture qu’on veut appliquer).

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 18 / 50

Page 19: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Appliquer une texture

Lorsqu’on veut appliquer (plaquer) la texture d’identifiant tex id :

g l B i n d T e x t u r e (GL TEXTURE 2D , t e x i d ) ;g l E n a b l e (GL TEXTURE 2D ) ;

Ne pas oublier de desactiver une fois le trace fait :glDisable (GL TEXTURE 2D);

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 19 / 50

Page 20: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

4 Aliassage

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 20 / 50

Page 21: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Minification

Le passage d’un pixel a l’autre lors de la rasterization peut correspondre aun saut de plusieurs texels.

1 Pixel = plusieurs texel (aliassage de reduction, ou minification) =perte d’information.

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 21 / 50

Page 22: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Magnification

Le passage d’un pixel a l’autre lors de la rasterization peut correspondre aumeme texel.

1 Texel = plusieurs pixels (aliassage d’agrandissement, oumagnification) = crenelage.

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 22 / 50

Page 23: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Filtrage bilineaire

Pour nuancer ces effets, on peut effectuer la moyenne (ponderee)entre les 4 texels qui sont les plus proches des coordonnees (s, t).

Le melange des couleurs obtenu donne une perception legerementfloue ⇒ permet de « lisser »la perte d’information et les marchesd’escalier

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 23 / 50

Page 24: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Filtrage bilineaire

g l T e x P a r a m e t e r i (GL TEXTURE 2D,<GL TEXTURE MIN ou GL TEXTURE MAG>,<GL LINEAR ou GL NEAREST>)

λ1 = s−s0s1−s0

λ2 = t−t0t2−t0

C1 = λ1Couleur0 + (1− λ1)Couleur1

C2 = λ1Couleur2 + (1− λ1)Couleur3

Cpixel = λ2C1 + (1− λ2)C2

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 24 / 50

Page 25: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Mip-mapping

Stocker plusieurs resolutions d’une meme texture.

Changer de resolution de texture selon le nombre de texels quicorrespondent a un pixel (determine par les increments faits sur(s, t)).

Permet de nuancer les pertes d’informations (filtre d’aliassage) si lesdifferentes resolutions sont construites par moyennage.

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 25 / 50

Page 26: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Comparaison

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 26 / 50

Page 27: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Activation MipMap

Chargement totalement libre :

glTexImage2D(GL_TEXTURE_2D,<NIVEAU MIPMAP>,...,image);

Construction automatique avec moyennage :

gluBuild2DMipmaps(GL_TEXTURE_2D,3, width,height,

GL_RGB,GL_UNSIGNED_BYTE, image);

Choix du niveau de resolution par OpenGL (filtre de minimification) :

glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,

GL_NEAREST_MIPMAP_NEAREST);

⇒ Le niveau λ est choisi (a chaque trace de pixel) pour avoir la meilleurecorrespondance possible (1 pixel = 1 texel).

λ = E(log2(ds)) ou ds est le nombre de texels (dans la direction s) correspondant a 2

pixels consecutifs.

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 27 / 50

Page 28: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Comparaison : filtrage bilineaire

glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);

(image du jeu Quake 3 de Id Software - capture copiee de :http ://kafou.free.fr/filtrage/ ).

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 28 / 50

Page 29: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Comparaison : bilineaire avec MipMap

glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 29 / 50

Page 30: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Comparaison : trilineaire

glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR);

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 30 / 50

Page 31: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Trilineaire

1 Considerer les deux niveaux de mipmap les plus proches (i.e le niveauλ et λ+ 1).

2 Faire un filtre bilineaire pour chacun des deux niveaux en(s, t)⇒ Cλ,Cλ+1

3 Faire une moyenne ponderee entre les deux couleurs obtenues⇒ C = (1− k)Cλ + kCλ+1 (coefficient donne par k = frac(λ)).

⇒ Passage « lisse »entre les differents niveaux de mipmapF. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 31 / 50

Page 32: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

5 Generation automatique descoordonnees de texture

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 32 / 50

Page 33: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Activation

glEnable(GL TEXTURE GEN S) et glEnable(GL TEXTURE GEN T) (generationpour S et T ).

Apres activation, les glTexCoord ne sont plus interpretes par OpenGL(les coordonnees de texture seront automatiquement calculees enchacun des sommets).

Ne pas oublier de desactiver apres le trace parglDisable (GL TEXTURE GEN S) et glDisable (GL TEXTURE GEN T)

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 33 / 50

Page 34: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Trois modes de generation

glTexGeni(<GL_S ou GL_T>,GL_TEXTURE_GEN_MODE,<mode de generation>)

GL OBJECT LINEAR : lineaire dans le repere objet (plane mapping)

GL EYE LINEAR : lineaire dans le repere de l’observateur (planemapping)

GL SPHERE MAP : projection spherique (environment mapping).

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 34 / 50

Page 35: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Plane mapping dans le repere objet

Chaque glVertex dont les coordonnees sont (x , y , z ,w) (dans le reperelocal courant) est affecte avec la coordonnee de texture s :

s = p1x + p2y + p3z + p4w

ou les coefficients ps = (p1, p2, p3, p4) sont specifies par :glTexGenfv(GL S,GL OBJECT PLANE,<float ps[4]>)

(idem pour la coordonnee T avec GL T).

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 35 / 50

Page 36: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Exemple

double ps [ 4 ] = { 0 . 5 , 0 . 5 , 0 . 0 , 0 . 2 } ;double pt [ 4 ] ={ −1 . 0 , 1 . 0 , 0 . 0 , 0 . 0} ;g lTexGendv ( GL S , GL OBJECT PLANE , ps ) ;glTexGendv ( GL T , GL OBJECT PLANE , pt ) ;

On peut interpreter ps et pt comme un changement de reperepar rapport au repere local de l’objet.

st..

Texture

= MTexture→Objet

xyzw

Objet

ou MTexture→Objet =

ps[0] ps[1] ps[2] ps[3]pt[0] pt[1] pt[2] pt[3]

. . . .

. . . .

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 36 / 50

Page 37: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Plane mapping dans le repere eye

g l B i n d T e x t u r e (GL TEXTURE 2D , t e x i d ) ;

g l T e x G e n i ( GL S , GL TEXTURE GEN MODE , GL EYE LINEAR ) ;g l E n a b l e (GL TEXTURE GEN S ) ;g l T e x G e n i ( GL T , GL TEXTURE GEN MODE , GL EYE LINEAR ) ;g l E n a b l e (GL TEXTURE GEN T ) ;

double ps [ 4 ] ={1 , 0 , 0 . 0 , 0} ;double pt [ 4 ] = { 0 . 0 , 1 . 0 , 0 . 0 , 0 . 0 } ;g lTexGendv ( GL S , GL EYE PLANE , ps ) ;glTexGendv ( GL T , GL EYE PLANE , pt ) ;

⇒ GL EYE LINEAR remplace GL OBJECT LINEAR

⇒ GL EYE PLANE remplace GL OBJECT PLANE

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 37 / 50

Page 38: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Calcul

s = ps1x + ps2y + ps3z + ps4w

Identique a plane mapping dans le repere objet, MAIS :

(x , y , z ,w) sont les coordonnees du sommet dans le repere de l’oeil(GL EYE LINEAR).

ps est a interpreter dans le repere courant lors de l’appel aglTexGendv(GL S,GL EYE PLANE,ps); ( !).

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 38 / 50

Page 39: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Exemple

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 39 / 50

Page 40: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Environment mapping

g l B i n d T e x t u r e (GL TEXTURE 2D , t e x i d ) ;

g l T e x G e n i ( GL S , GL TEXTURE GEN MODE , GL SPHERE MAP ) ;g l E n a b l e (GL TEXTURE GEN S ) ;

g l T e x G e n i ( GL T , GL TEXTURE GEN MODE , GL SPHERE MAP ) ;g l E n a b l e (GL TEXTURE GEN T ) ;

Le calcul au sommet depend principalement de l’angle entre lanormale N et le vecteur de vue V .

Interpretation : reflet sur une bille d’acier « plongee »dans unenvironnement.

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 40 / 50

Page 41: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Exemple

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 41 / 50

Page 42: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Cartoon shading (simple)

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 42 / 50

Page 43: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

6 Pour aller plus loin...

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 43 / 50

Page 44: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Multi-texturing

Appliquer plusieurs textures en meme temps lors du trace des polygones (i.e. plusieurstextures courantes simultanement). Chaque texture courante est appelee unite.

glActiveTexture (GL TEXTUREi) (i = 0, 1, ...) : toutes les instructions de texturess’adressent alors a l’unite numero i .

Par defaut, la GL TEXTURE0 est active.

glTexCoord concerne toujours GL_TEXTURE0. Utiliser glMultiTexCoord(GL TEXTUREi,...)pour les autres unites.

GL TEXTURE0 GL TEXTURE1 GL TEXTURE2 placage des 3 unites

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 44 / 50

Page 45: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Multi-texturing

v o i d i n i t ( ) {. . .g l A c t i v e T e x t u r e (GL TEXTURE0 ) ;g l B i n d T e x t u r e (GL TEXTURE 2D , i d t e x 1 ) ; // i d t e x 1 e s t l a t e x t u r e c o u r a n t e POUR l ’ u n i t e 0g l E n a b l e (GL TEXTURE 2D ) ; // a c t i v a t i o n p l a c a g e ( de l ’ u n i t e 0 ) .g l A c t i v e T e x t u r e (GL TEXTURE1 ) ;g l B i n d T e x t u r e (GL TEXTURE 2D , i d t e x 2 ) ; // i d t e x 2 e s t l a t e x t u r e c o u r a n t e POUR l ’ u n i t e 1g l E n a b l e (GL TEXTURE 2D ) ; // a c t i v a t i o n p l a c a g e ( de l ’ u n i t e 1 ) .g l TexE nvf (GL TEXTURE ENV , GL TEXTURE ENV MODE ,GL MODULATE ) ; // mode de p l a c a g e de l ’ u n i t e 1

}}

⇒ nombreuses solutions de melange des couleurs entre les textures (cfglTexEnv).

v o i d t r a c e r C a r r e M u l t i ( ) {g l B e g i n (GL QUADS ) ;

g l M u l t i T e x C o o r d 2 f (GL TEXTURE0 , 0 , 0 ) ;g l M u l t i T e x C o o r d 2 f (GL TEXTURE1 , 0 , 0 ) ;g l V e r t e x 3 f (−1 ,−1 ,0);g l M u l t i T e x C o o r d 2 f (GL TEXTURE0 , 1 , 0 ) ;g l M u l t i T e x C o o r d 2 f (GL TEXTURE1 , 1 , 0 ) ;g l V e r t e x 3 f (1 ,−1 ,0) ;g l M u l t i T e x C o o r d 2 f (GL TEXTURE0 , 1 , 1 ) ;g l M u l t i T e x C o o r d 2 f (GL TEXTURE1 , 1 , 1 ) ;g l V e r t e x 3 f ( 1 , 1 , 0 ) ;g l M u l t i T e x C o o r d 2 f (GL TEXTURE0 , 0 , 1 ) ;g l M u l t i T e x C o o r d 2 f (GL TEXTURE1 , 0 , 1 ) ;g l V e r t e x 3 f (−1 ,1 ,0) ;g lEnd ( ) ;

}F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 45 / 50

Page 46: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Transformations

Toutes les coordonnees (s, t) subissent la matrice de texture courante(matrice identite par defaut).

glMatrixMode(GL TEXTURE) : toutes les instructions de matrices (glRotate,glTranslate , glPushMatrix,...) s’adresseront a la pile de matrice de texture(de l’unite de texture active).

⇒ Animation de texture (cf TP), controle de projection, etc

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 46 / 50

Page 47: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Lightmap

LightMap : une source lumineuse peut-etre simulee par une texture(projection d’un spot, effet speculaire avec l’environment mapping,...).

Scene Eclairement gl Texture lightmap (precalculee)

Placage lightmap resultat final

(source : http ://www.flipcode.net/ )F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 47 / 50

Page 48: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Billboard

BillBoard : objet complexe represente par un rectangle sur lequel onplaque une photo (arbre, personnage, grille d’un portail) ⇒ rectangletoujours oriente vers l’observateur, et utilisation de la transparence.

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 48 / 50

Page 49: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Depth map

DepthMapping : texture de profondeur (pour les ombres porteesnotamment).

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 49 / 50

Page 50: Chapitre IV : Les textures - Programmation 3Daubert/p3d/Cours04.pdf · 3 Faire une moyenne pond er ee entre les deux couleurs obtenues)C = (1 k)C + kC +1 (coe cient donn e par k =

Effets evolues

Environment Cube Mapping : calcul de reflexion base sur le cube (etnon une « approximation »de sphere).

Texture 3D, Bump-Mapping, ..........

F. Aubert (LS6/MS2) P3D/ IV Les textures 2008-2009 50 / 50