CM4 - Serveur pédagogique UFR Sciences et Techniques

Transcription

CM4 - Serveur pédagogique UFR Sciences et Techniques
22/09/16
SYNTHÈSE D’IMAGE L3
TEXTURES
Sandrine LANQUETIN
Bureau G208
[email protected]
D’après les cours
de M. Neveu du LE2I
et de J. Thollot de l’IMAG
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
3
Modèle géométrique
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
4
Illumination locale
Objet =
liste de points munis de
normales
+
groupement en faces
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
Introduction
•  Détails complexes sur une surface
•  Augmenter le nombre de polygones
•  Pb : augmentation complexité modélisation et rendu
•  Alternative : utilisation de texture 2D ou 3D
5
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
6
Modélisation de la « matière »
Ajout d’attributs (couleur, transparence…) en
chaque point
Problème : Ne pas tout modéliser à l’échelle de
la géométrie !
On veut garder
une seule face,
mais plusieurs
couleurs
1
22/09/16
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
7
Les textures
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
8
Modélisation de la « matière »
Ajout d’attributs (couleur, transparence…) en chaque
point
Problème : Ne pas tout modéliser à l’échelle de la
géométrie !
Des micropolygones
seraient
nécessaires
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
9
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
10
Les textures
Les textures
Font varier la matière à l’intérieur de chaque face
• 
• 
Ajout d'information visuelle à petit prix
Support hardware
•  interpolation des coordonnées de texture
•  interpolation des valeurs de couleur
•  filtrage multi-résolution (mip-mapping)
X
Texture de couleurs
22/09/16
=
Texture de normales
S. Lanquetin – L3 Info, Synthèse d’images
11
TEXTURES
Gain de réalisme
Pas « cher »
TEXTURES 2D
Attacher la texture à
l’objet ó travailler
dans l’espace de
l’objet
2
22/09/16
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
13
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
Est-ce simple ?
Est-ce simple ?
•  Idée simple
•  coller une image sur une surface
•  Idée simple
•  coller une image sur une surface
image 2D
image 2D
surface 3D
22/09/16
14
S. Lanquetin – L3 Info, Synthèse d’images
surface 3D
15
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
16
Placage de Texture
Texture mapping
Est-ce simple ?
•  Idée simple
•  coller une image sur une surface
•  3 ou 4 systèmes de coordonnées
projection-1
mapping-1
projection
mapping
v
u
image 2D
Espace image
Espace objet
Espace texture
pixel de l’image
surface 3D
Texel de la texture
surface 3D
22/09/16
Texel
S. Lanquetin – L3 Info, Synthèse d’images
→
17
Pixel
+ tous les texels sont traités dans l’ordre
22/09/16
Pixel
S. Lanquetin – L3 Info, Synthèse d’images
→
18
Texel
+ seulement les pixels visibles sont traités
+traitement pixel par pixel
-  A(texel) < pixel.
calcul de la proportion du pixel couvert
-  plus complexe :l
- plus simple, mais la contribution de tout texel caché est calculée
inutilement
Calcul de la projection inverse du pixel dans l’espace objet, puis des
coordonnées correspondantes dans l’espace texture
3
22/09/16
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
19
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
20
Principe
Les textures 2D
•  Image plane I (s,t)
Coordonnées paramétriques
•  Fonction de plaquage
(mapping) A : P(x,y,z) è (s,t)
•  Modèle 3D : points ou faces, normales,
coordonnées de texture (s,t)
S
A
A
Projection
T
P
A(S-1)
Coordonnées de
texture
t
s
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
21
S connue
Coordonnées de
l’objet
22/09/16
Coordonnées de
l’écran
S. Lanquetin – L3 Info, Synthèse d’images
22
Déformation
L'espace paramétrique de la
sphère recouvre complètement
l'espace de la texture
(a)La texture déformée
sphère.
Image de l'espace des
paramètres de l'objet (gras)
dans l'espace de la texture
(grisé)
Déformation de la texture pour l’adapter à la
paramétrisation de la surface. On utilise une texture
déformée (respectant le facteur d’échelle 2 :1)‫‏‬
transformation l = 2.h et θ= π/4 (qui implique h = V2/3).
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
Textures cycliques
(b) Application sur la
23
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
24
Grande surface à texturer
•  Feuille papier peint assez grande pour recouvrir toute la surface
•  Or (s,t) dans [0,1]²
•  Mais pas (u,v)
•  Structure périodique
Utilisation d’une texture naturelle.
(a) Texture de bois.
(b) Sphère en bois
(c)  Et de l’autre côté de la sphère ?
(d) Paramétrisation multiple.
4
22/09/16
22/09/16
25
S. Lanquetin – L3 Info, Synthèse d’images
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
26
Répétition
Répétition avec ε
⎧ u= mod(u',1/n )
⎪
u
ε: ⎨
v=mod(v',1/n
)
⎪⎩
v
22/09/16
27
S. Lanquetin – L3 Info, Synthèse d’images
Répétition Miroir
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
28
Exemple de répétition
Calculer (u,v) pour (u’,v’)=(2/3,1/2)
⎧
⎛
1 ⎞
⎛ 2 1⎞ 1
⎪u = mod⎜⎜ u ' , ⎟⎟ = mod⎜ , ⎟=
nu ⎠
⎪
⎝ 3 5⎠ 3
⎝
⎨
⎛
⎞
1
⎪ v = mod⎜ v' , ⎟ = mod⎛ 1 , 1 ⎞= 1
⎜
⎟
⎜ n ⎟
2
⎪
⎝ 2 3⎠ 2
v ⎠
⎝
⎩ 10
1
2
5
3 = × =
= 3.3333 = 3 +
1
3
3 1
3
1
5
2 = 3 = 1.5 = 1 + 1
1
2
2
3
⎧
⎧mod(u',1/n u ) si ⎢⎣ u'.n u ⎥⎦ estpair
⎪u = ⎨
⎪
⎩1-mod(u',1/n u ) sinon
ε :⎨
⎧mod(v',1/n v ) si ⎢⎣ v'.n v ⎥⎦ estpair
⎪
⎪ v = ⎨1-mod(v',1/n ) sinon
v
⎩
⎩
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
29
Exemple de répétition miroir
⎧
⎧mod(u',1/n u ) si ⎣⎢ u'.n u ⎦⎥ estpair
1
⎪u = ⎨
= 1−
⎪
⎩1-mod(u',1/n u ) sinon
3
ε :⎨
⎧mod(v',1/n v ) si ⎢⎣ v'.n v ⎥⎦ estpair
1
⎪
= 1−
⎪ v = ⎨1-mod(v',1/n ) sinon
v
⎩
⎩
2
10
S. Lanquetin – L3 Info, Synthèse d’images
30
Cas complexes
Calculer (u,v) pour (u’,v’)=(2/3,1/2)
⎢
⎥ ⎢ ⎥
⎣u'.nu ⎦ = ⎢ 3 × 5⎥ = ⎢ 3 ⎥ = ⎣3.3333⎦
⎣
⎦ ⎣ ⎦
22/09/16
2
=
3
1
=
2 2
=3
•  Quand S non connue
•  Application intermédiaire
•  Projection
5
22/09/16
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
31
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
32
S. Lanquetin – L3 Info, Synthèse d’images
34
Application A
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
33
Projection selon un axe
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
Projection sphérique
22/09/16
Projection cylindrique
35
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
36
Projection par Développement
6
22/09/16
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
37
Projection par Développement
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
38
Effets différent selon le mapping
•  Quel (x,y,z) on considère ?
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
39
Surfaces complexes : application
intermédiaire
Position relative à
l’englobant
22/09/16
Problèmes
S. Lanquetin – L3 Info, Synthèse d’images
40
Composition application intermédiaire projection
Vecteur normal à la surface
(exagère les déformations)‫‏‬
Vecteur réfléchi
(environnement mapping)‫‏‬
Centre
22/09/16
Vecteur normal à la surface
intermédiaire (atténue les
déformations)‫‏‬
S. Lanquetin – L3 Info, Synthèse d’images
41
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
42
Problèmes
•  Aliassage
•  Plaquer une texture sans distorsion
•  Synthétiser une texture par l’exemple
•  Synthétiser/plaquer sur une surface directement
7
22/09/16
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
43
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
44
Problèmes d’aliassage
Que se passe-t-il ?
- Devant, on voit les pixels
- Au fond
•  Plusieurs couleurs à afficher dans un pixel
–  On aimerait une moyenne !
•  Fréquences parasites : les « alias »
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
45
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
46
Problèmes d’échelle
Ecran
At<Ap
- Devant, on voit les pixels
Objet
A t ≈ Ap
Texture
At >Ap
- Au fond
•  Plusieurs couleurs à afficher dans un pixel
–  On aimerait une moyenne !
•  Fréquences parasites : les « alias »
22/09/16
Ecran
S. Lanquetin – L3 Info, Synthèse d’images
Petite échelle
47
22/09/16
Grande échelle
S. Lanquetin – L3 Info, Synthèse d’images
48
Texture
8
22/09/16
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
49
Même taille
22/09/16
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
50
S. Lanquetin – L3 Info, Synthèse d’images
52
Texels < Pixels
S. Lanquetin – L3 Info, Synthèse d’images
51
22/09/16
Facteur de compression d
Texels > Pixels
Pij : pixel
Puv : polygone correspondant dans l’espace texture
d = Α ( Puv )
Ex :
d = 1 : le pixel couvre tt l’espace texture
d = ¼ : le pixel couvre ¼ de l’espace texture
Taille image texture = 2N x 2N => aire d’un texel At = 2-N x 2-N
Facteur de compression d’un pixel :
dt = Α t = 2− N
Si d<dt alors pixellisation
Si d>dt alors aliasing
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
Pixellisation
53
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
54
Pixellisation
(uc,vc) : image du centre de Pij
Dans l’image Tij, (n.uc,n.vc) est dans [i’,i’+1]x[j’,j’+1] avec
i’=n.uc et j’=n.vc
Interpolation
bilinéaire
Interpolation
bicubique
Interpolation pour lutter contre la pixellisation.
De gauche à droite sur chaque exemple :
image pixellisée, interpolation bilinéaire, interpolation
bicubique.
9
22/09/16
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
55
Solution 1 : calcul à haute résolution
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
56
Solution 2 : Mip-Mapping
57
Sous échantillonnage (aliasing)‫‏‬
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
58
Mip-Mapping
Mip-Mapping : texture à plusieurs échelles
•  Ensemble des images pré-calculées pour le mip-mapping.
On suppose l’image de la texture carrée et de taille 2N × 2N.
Changement de résolution le plus simple : construire une image deux fois plus
petite.
A chaque pixel de l’image deux fois plus petite, on associe un bloc de 2×2 pixels sur
l’image originale de valeur = moyenne des 4 pixels du bloc.
Ti,kj−1 =
1 k
k
k
k
(T
+ T2i+1,2
+ T2i,2
+ T2i+1,2
)
j
j +1
j +1
4 2i,2k j
Ti, j
La taille de l’image
est 2k × 2k.
N
A partir de l’image T on construit un ensemble de N + 1 images T k , k de 0 à N
Facteur de compression au niveau k : dk = 2-k
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
59
Mip-Mapping
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
Mip mapping : couleur d’un pixel
•  Stockage optimal du mipmap d’une texture couleur (de la
Pixel courant (uc,vc,d)‫‏‬
figure précédente) en mémoire.
R
G
R G
B B
R G
B
R G
B
MIP = Multum In Parvo (beaucoup de chose en peu de place)
60
kc = -log2(d)‫‏‬
Voisin le plus proche
InterpolationBilinéaire
(
C (uc , vc ) = Ti k', 'j ' k ' = [kc ],(i ', j ') = ⎣⎡uc .2k ' ⎦⎤ , ⎣⎡vc .2k ' ⎦⎤
C ( uc ,vc ) = Ck' ( u',v' )
Ck' ( u,v ) = [1 − u
Interpolation trilinéaire
)
k' = [ kc ] ,( u',v' ) = ( uc − [uc ] ,vc − [vc ])
k'
u ] ⎡Ti',j'
⎢ k'
⎢⎣Ti'+1,j'
⎡1 − v ⎤
k'
⎤⎢
Ti',j'
+1
⎥
⎥⎣ v ⎦
Ti'k'+1,j'+1 ⎥⎦
C (uc , vc ) = (1 − λ )Ck ' (u ', v ') + λCk '+1 (u ', v ')
kc = (1 − λ )k '+ λ (k '+ 1)
k ', (u ', v '), Ck ' (u, v) comme bilinéaire
10
22/09/16
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
61
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
62
Textures de normales Technique du mipmapping appliqué à
l’échiquier
bilinéaire
22/09/16
(bump mapping)
trilinéaire
S. Lanquetin – L3 Info, Synthèse d’images
63
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
64
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
66
Perturbation des normales
Donnée par une texture de normale (normal map)
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
Perturbation des normales
Donnée par une texture de relief (bump map)
65
Bump Mapping/ Displacement
Mapping
Carte de hauteurs
Modification des normales
11
22/09/16
22/09/16
67
S. Lanquetin – L3 Info, Synthèse d’images
t Espace Texture
(1, 1)
(0, 0)
68
on associe à chaque sommet (P0, P1, P2) d’une facette des
coordonnées (Q0,Q1,Q2) dans l’espace des textures
Espace Objet
(s, t) = (0.2, 0.8)
•A
a•
b•
S. Lanquetin – L3 Info, Synthèse d’images
Cas des facettes
Cas des facettes
(0, 1)
22/09/16
•c
(0.4, 0.2)
•
B
s
(1, 0)
C
• (0.8,
0.4)
Si P = (1 - α - β).P0 + α.P1 + β.P2
alors
Q = (1 - α - β).Q0 + α.Q1 + β.Q2
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
69
Cas des facettes
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
70
Intérêt du placage de texture
Si on utilise une interpolation similaire à l’ombrage de Gouraud
(accélération texturage)
ie si P' dans l’espace de l’écran est défini par :
P’ = (1 – α’ – β’).P’0 + α’.P’1+ β’.P’2
Et qu’on calcule Q = (1 – α’ – β’).Q0 + α’.Q1 + β’.Q2 alors erreur projective
•  Réduction de la complexité géométrique
•  Résultat naturel lors de transformations
il faut :
Q=
Q0
Q
Q
+α 1 + β 2
w0
w1
w2
(1 − α − β ) / w0 + α / w1 + β / w2
(1 − α − β )
wi coord . hom. de Pi
•  Simulation des matériaux naturels, des phénomènes naturels ou
optiques
•  Facile, pas cher
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
72
Introduction
•  Couleur
•  Dégradé de couleur
TEXTURES OPENGL
•  Sans texture : bcp de polygones
•  Réalisme (moins régulier, perspective…)
12
22/09/16
22/09/16
S.Lanquetin – L3 Info, Synthèse d’images
73
Introduction
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
74
Texture
•  Appliquer une image 1D, 2D ou 3D sur des primitives
géométriques
•  2D plus intuitive
•  Les coordonnées de texture sont (s,t,r,q)
•  Répétition de la texture dans 1, 2 ou 3 directions
•  Application automatique de texture
•  Réfléchissement de l’environnement
sur les objets brillants
•  Fusion couleur / Texture
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
75
Principe de base du placage de texture 2D
Un texel est un couple (s,t) de coordonnées dans [0,1]*
[0,1] identifiant un point de la texture
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
76
Qu’est ce qu’une texture
•  Texture : Tableau de données
•  Ex. Couleur, luminance, alpha, normal…
•  Texel : 1 élément du tableau
•  coordonnées de texture sont (s,t,r,q)
•  Texture 2D (s,t)
Problème : comment trouver le(s) texel(s) correspondant à
un fragment xs, ys ?
Solution : couples sommet/texel et interpolation
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
77
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
Placage de texture
Les textures en OpenGL
•  Comment construire une texture
•  Etapes du placage de texture
•  Spécifier une texture
•  Activer le placage de texture
•  Préciser comment la texture est appliquée sur les objets
•  Dessiner la scène
•  Quelle texture pour un texel ?
•  Objet texture
•  Comment lier le pixel aux texels ?
•  Coordonnées de texture
78
•  Quelle interaction entre texture et pixel ?
•  Remplacement, Mélange, Modulation
•  Pixel plaqué sur plusieurs texels ? L’inverse ?
•  Aliassage : Augmentation et réduction
13
22/09/16
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
79
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
Les textures en OpenGL
Exemple de création de texture
Préparation:
•  Génération d’une image qui sera utilisée comme texture
•  Préparer l’image comme un gros morceau de mémoire
•  La générer ou la charger (librairies)
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
81
80
// l’image damier.
static GLubyte checkImage0[256][256][4];
// Générer une image damier avec du code
void makeCheckImage(void)
{
GLubyte c;
for(int i=0; i<256; i++)
for(int j=0; j<256; j++) {
c = ((((i&0x20)==0)^((j&0x20))==0))*255;
checkImage0[i][j][0] = checkImage0[i][j][1] =
checkImage0[i][j][2] = c;
checkImage0[i][j][3] = 255;
}
}
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
82
Les textures en OpenGL
Définir une image comme Texture
Préparation:
glTexImage2D( target, level, components,
w, h, border, format, type, texels );
•  Préparer l’image comme un gros morceau de mémoire
•  La générer ou la charger (librairies)
•  Créer une texture à partir d’une image
•  Quelles informations conserver en mémoire ?
•  RGB? RGBA?
•  Hauteur/Largeur
•  Format de données?
•  float? unsigned int?
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
83
target: type de texture, e.g. GL_TEXTURE_2D
level: nombre de résolutions utilisées pour le
mipmapping//0
components: éléments par texel //1 à 4
w, h: largeur et hauteur des texels en pixels//2^n
border: largeur de la bordure//0 ou 1
format and type: description des texels//GL_RGBA
texels: pointeur sur le tableau de texels
glTexImage2D(GL_TEXTURE_2D, 0, 3, 512, 512,
0, GL_RGBA, GL_UNSIGNED_BYTE, texture);
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
Les textures en OpenGL
Les textures en OpenGL
•  Rendu
•  Coordonnées de texture
Mise en place:
•  Associe à chaque sommet des coordonnées de texture
Ou
•  Laisse OpenGL générer des coordonnées de texture
84
•  Activer les fonctionnalités de texture
•  Activé ou Désactivé
•  glEnable(GL_TEXTURE_2D)
•  Spécifier comment appliquer la texture sur les pixels
•  Remplace/Mélange/Module/Décale
•  glTexEnv(…)
•  Autres paramètres
•  filtres
14
22/09/16
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
85
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
86
Exemple de Texture
Spécifier une texture image
void GL_init(void)
{
makeCheckImage();
// spécifier la texture avec l’image (pointeur sur le dernier param)
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 256, 256, 0,
GL_RGBA, GL_UNSIGNED_BYTE, checkImage0);
// Comment la texture interagit avec la couleur du pixel
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,
GL_DECAL);
// filtres
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
GL_NEAREST);
// Activation du placage de texture 2D
glEnable(GL_TEXTURE_2D);
}
•  Définir une texture à partir d’un tableau de
22/09/16
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
87
Coordonnées de texture
Glubyte texture[512][512][3];
•  Définir à partir d'une autre texture
•  copie
•  code
•  Activer l’application de texture
•  glEnable(GL_TEXTURE_2D)
•  OpenGL supporte des cartes de texture de dimension 1
à4
texture
1,1
• 
glTexCoord{1234}{sifd}(coords)
spécifié pour chaque sommet
0, 1
1,0
Espace Texture
Attention aux distorsions si les ratios sont différents.
Pour éviter cela, prendre une portion de texture
S. Lanquetin – L3 Info, Synthèse d’images
89
(s, t) = (0.2, 0.8)
A
a
0, 0
22/09/16
Espace Objet
1, 1
b
22/09/16
88
•  À partir des coordonnées paramétriques de la
t
0,0
S. Lanquetin – L3 Info, Synthèse d’images
Appliquer une Texture
Comment déterminer les coordonnées texture ?
0,1
texels (texture elements)
c
(0.4, 0.2)
B
C
(0.8, 0.4)
1, 0 s
S. Lanquetin – L3 Info, Synthèse d’images
90
Coord texture
Exemple de dessin d'un carré texturé
•  Texture carrée et objet carré
•  Application des coord de text sur les coord géom
glEnable(GL_TEXTURE_2D) ;
glBegin(GL_QUADS) ;
glTexCoord2f(0,0) ;
glVertex2f(x1,y1) ;
glTexCoord2f(1,0) ;
glVertex2f(x2,y1) ;
glTexCoord2f(1,1) ;
glVertex2f(x2,y2) ;
glTexCoord2f(0,1) ;
glVertex2f(x1,y2) ;
glEnd() ;
t
0, 1
0, 0
1, 1
1, 0s
x1,y2 0,1
x2,y2 1,1
x1,y1 0,0
x2,y1 1,0
15
22/09/16
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
91
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
92
Attention !
Attention !
Pour OpenGL, origine image bas gauche
Souvent origine image haut gauche
0,1
x1,y2
1,0
0,0
1,1
x2,y2
Pour OpenGL, origine image bas gauche
Souvent origine image haut gauche
0,0
x1,y2
1,0
0,0
1,0
x2,y2
x1,y1 Objet
0,0
x2,y1
1,0
x1,y1 Objet
0,1
x2,y1
1,1
0,1
Texture
1,1
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
0,1
93
Coord texture
22/09/16
Texture
1,1
S. Lanquetin – L3 Info, Synthèse d’images
Exemple de dessin d'un carré texturé
•  Texture carrée et mur l*2l/3
•  Application des coord de text des 2/3 inf de la texture sur les coord
géom du mur
t
glEnable(GL_TEXTURE_2D) ;
0, 1
glBegin(GL_QUADS) ;
glTexCoord2f(0,0) ;
glVertex2f(x1,y1) ;
glTexCoord2f(1,0) ;
0, 0
glVertex2f(x2,y1) ;
glTexCoord2f(1,2/3) ;
glVertex2f(x2,y2) ;
x1,y2 0,2/3
glTexCoord2f(0,2/3) ;
glVertex2f(x1,y2) ;
glEnd() ;
x1,y1 0,0
22/09/16
94
S. Lanquetin – L3 Info, Synthèse d’images
95
22/09/16
Exemple de Code
•  Texture rectangulaire 12*4
glBegin(GL_POLYGON);
glTexCoord2f(0, 0);
glVertex3f(0, 0, 0);
glTexCoord2f(0.5, 0);
glVertex3f(1, 0,0);
glTexCoord2f(0.5, 0.5);
glVertex3f(1, 1, 0);
glTexCoord2f(0, 0.5);
glVertex3f(0, 1,0);
glEnd();
•  Utilisation des 2/3 inf de la texture
•  Copié-collé de la texture jusqu'au ratio voulu
•  Boite : 30 polygones de largeur 12/30 et de hauteur 4
•  Application des coord de text des 2/3 inf de la texture
sur chaque polygone
(0,0) (1/30,0)(1/30,2/3)(0,2/3)
(1/30,0) (2/30,0)(2/30,2/3)(1/30,2/3)
1, 0s
x2,y2 1,2/3
x2,y1 1,0
S. Lanquetin – L3 Info, Synthèse d’images
Coord texture
•  Ratio 3 pour 1 or ratio texture : 2n pour 1
1, 1
t
0, 1
0, 0
96
1, 1
1, 0 s
(2/30,0) (3/30,0)(3/30,2/3)(1/30,2/3)
16
22/09/16
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
97
Exemple de Code
glBegin(GL_POLYGON);
glTexCoord2f(0.5, 0);
glVertex3f(0, 0, 0);
glTexCoord2f(1, 0);
glVertex3f(1, 0,0);
glTexCoord2f(1, 0.5);
glVertex3f(1, 1, 0);
glTexCoord2f(0.5, 0.5);
glVertex3f(0, 1,0);
glEnd();
22/09/16
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
98
Exemple de Code
t
0, 1
0, 0
S. Lanquetin – L3 Info, Synthèse d’images
1, 1
1, 0 s
99
glBegin(GL_POLYGON);
glTexCoord2f(0, 0);
glVertex3f(0, 0, 0);
glTexCoord2f(0.5, 0);
glVertex3f(1, 0,0);
glTexCoord2f(0.5, 1);
glVertex3f(1, 1, 0);
glTexCoord2f(0, 1);
glVertex3f(0, 1,0);
glEnd();
22/09/16
t
0, 1
0, 0
S. Lanquetin – L3 Info, Synthèse d’images
Les textures en OpenGL
Paramètres de Texture
// exemple d’association manuelle des coordonnées de
texture
1
glBegin(GL_TRIANGLES);
glTexCoord2f(1.0, 0.0);
glVertex2f(-1.0, -1.0);
0
glTexCoord2f(1.0, 1.0);
1
0
glVertex2f(1.0, -1.0);
y
glTexCoord2f(0.0, 1.0);
1
glVertex2f(0.0, 1.0);
glEnd();
1 x
•  Paramètres d’enveloppement (Wrapping)
22/09/16
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
101
1, 1
1, 0 s
100
Æ Que faire quand s et t sont en dehors de (0,1)
•  Modes de filtrage
Æ Moyennes de régions plutôt que texels
•  Mipmapping
Æ Textures à différentes résolutions
•  Paramètres d’environnement
Æ Comment la texture interagit avec la lumière
S. Lanquetin – L3 Info, Synthèse d’images
Paramétrage : bords de texture
Mode d’enveloppement
•  Pour chaque dimension (s et t) :
•  Répétition de la texture
•  ou prolongement avec la dernière valeur
•  bordure
Pincement: 1 si s,t > 1, 0 si s,t <0
Répétition: s,t modulo 1
102
glTexParameteri( GL_TEXTURE_2D,
GL_TEXTURE_WRAP_S, GL_CLAMP )
glTexParameteri( GL_TEXTURE_2D,
GL_TEXTURE_WRAP_T, GL_REPEAT )
t
s
texture
GL_REPEAT
répétition
GL_CLAMP
pincement
17
22/09/16
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
103
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
104
Paramétrage : bords de texture
Interpolation
glTexParameterfv(GL_TEXTURE_2D,
GL_TEXTURE_BORDER_COLOR, R,G,B,A)
OpenGL utilise l’interpolation bilineaire pour
trouver des texels entiers à partir des
coordonnées de texture spécifiées
Distortions possible
texture étirée
t
bonne sélection
des coord de tex
sur un trapèze
montrant les effets de
interpolation bilinéaire
mauvaise sélection
des coord de tex
s
texture
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
105
Paramétrage : post-filtrage
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
106
Filtrage : Agrandissement et Réduction
glTexParameteri(GL_TEXTURE_2D,
GL_TEXTURE_MIN_FILTER, type)
glTexParameteri(GL_TEXTURE_2D,
GL_TEXTURE_MAG_FILTER, type)
•  Pour la réduction :
Après transformations les texels correspondent rarement
avec les pixels.
•  GL_NEAREST : point le plus proche dans la texture
•  GL_LINEAR : interpole entre les 4 points les plus proches
•  GL_NEAREST_MIPMAP_LINEAR : interpolation des 4 points les
plus proches du mipmap le plus proche
•  GL_LINEAR_MIPMAP_LINEAR : interpolation des 4 points les plus
proches dans l’interpolation des deux mipmaps les plus proches
•  Pour l’agrandissement : GL_NEAREST ou GL_LINEAR
Texture
Ecran
Texture
Agrandissement
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
107
Agrandissement et Réduction
Un pixel couvert par plus d'un texel (réduction) ou
Un texel couvre plus d'un pixel (agrandissement)
Echantillonage de point (le texel le plus proche) ou filtrage
linéaire
(filtre 2 x 2) pour obtenir les valeurs de la texture
22/09/16
Ecran
Réduction
S. Lanquetin – L3 Info, Synthèse d’images
108
Filtrage : Agrandissement et Réduction
Quelles valeurs de texel choisir pour le pixel?
Interpoler ou moyenner les données?
Æ Filtres OpenGL pour effectuer ces calculs.
Fixer les méthodes de filtrage
(agrandissement et réduction ) avec :
glTexParameter*()
Texture
Polygon
Agrandissement
Texture
Polygon
Réduction
18
22/09/16
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
109
Mode de filtrage
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
110
Filtrage
Modes déterminés par
glTexParameter{if}[v](target, pname, param)
glTexParameteri( target, type, mode )
target = GL_TEXTURE_2D, GL_TEXTURE_1D
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
GL_LINEAR);
Paramètres
Valeurs
GL_TEXTURE_WRAP_S
GL_CLAMP, GL_REPEAT
GL_TEXTURE_WRAP_T
GL_CLAMP, GL_REPEAT
GL_TEXTURE_MAG_FILTER
GL_NEAREST, GL_LINEAR
GL_TEXTURE_MIN_FILTER
GL_NEAREST, GL_LINEAR
GL_NEAREST_MIPMAP_NEAREST
GL_NEAREST_MIPMAP_LINEAR
GL_LINEAR_MIPMAP_NEAREST
GL_LINEAR_MIPMAP_LINEAR
Le filtrage linéaire nécessite une bordure d’un texel
supplémentaire pour filtrer aux bords (border = 1)
GL_TEXTURE_BORDER_COLOR 4 valeurs entre 0 et 1
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
111
Filtrage
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
112
Filtrage
GL_NEAREST
choisit le texel le plus proche du centre du pixel
Quatre choix de filtres sont possibles avec réduction.
Pour un plan mipmap donné on peut choisir :
GL_LINEAR
fait une moyenne des 4 texels les plus proches.
GL_NEAREST_MIPMAP_NEAREST
GL_NEAREST_MIPMAP_LINEAR
Lorsque les coordonnées texels sont proches de la bordure
de la texture, le résultat dépend de GL_REPEAT ou de
GL_CLAMP
Pour choisir les 2 meilleurs plans utiliser :
GL_LINEAR_MIPMAP_NEAREST
GL_LINEAR_MIPMAP_LINEAR
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
Modulation et mélange
Textures utilisées comme couleur des surfaces
Textures pour moduler les couleurs des objets ou pour
mélanger la texture avec la couleur des objets.
Trois types de fonctions selon les arguments de
glTexEnv*()
113
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
114
Paramétrage : combinaison avec le
fragment
•  glTexEnv permet de contrôler la façon dont la texture est
appliquée sur le fragment
glTexEnv (GL_TEXTURE_ENV,
GL_TEXTURE_ENV_MODE, mode) ;
•  Les modes les plus utilisés sont
•  GL_MODULATE : multiplie la couleur du fragment par celle du
texel
•  GL_BLEND : mélange la couleur du fragment et celle du texel
•  GL_REPLACE : remplace le fragment par le texel
•  Il existe aussi un mode GL_DECAL similaire à
GL_REPLACE pour RGB
19
22/09/16
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
115
Paramétrage : correction de la
perspective
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
116
Modulation et mélange
•  Deux modes d’interpolation
•  linéaire
•  utilisant les informations de profondeur/perspective (lent)
glTexEnv{if}[v](target, pname, param)
•  Choix du mode par
glHint(GL_PERSPECTIVE_CORRECTION_HINT, hint) ;
où hint est GL_DONT_CARE, GL_NICEST ou
GL_FASTEST
target = GL_TEXTURE_ENV
si pname = GL_TEXTURE_ENV_MODE
param = GL_DECAL, GL_MODULATE, GL_BLEND
indique comment la texture est combinée avec la couleur
de l’objet
si pname = GL_TEXTURE_ENV_COLOR
param est un vecteur RGBA. Ces valeurs sont utilisées si
la fonction de texture GL_BLEND a été spécifiée
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
117
Pile de matrices texture
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
118
Objet de Texture
Comme pour les objets, on peut appliquer des matrices de
transformations sur les textures.
•  OpenGL 1.1 et plus.
Ne pas oublier de se mettre dans le mode correspondant
•  Etapes des objets de texture
•  Générer des noms de texture
•  Lier les objets de texture aux données de texture
•  Fixer les propriétés pour chaque objet de texture
•  Pour le rendu, rappeler les objets de texture
•  Passer plus rapidement d’une texture à l’autre
•  TexImage(…) 1 fois /texture
Exemple :
glMatrixMode(GL_TEXTURE);
glTranslatef(.......);
............
glMatrixMode(GL_MODELVIEW);
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
119
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
Cible et objet de texture
Générer un identifiant de texture
•  Cible de texture = type de texture : 1D, 2D, 3D …
•  Générer des noms de texture
•  Objets de texture pour utiliser plusieurs textures
120
glGenTextures( n, *texIds );
•  n = nombre de noms de textures à générer
•  texIds = tableau d’entiers identifiant les textures
•  Exemple
unsigned int texIds[5];
glGenTextures(5, texIds)
20
22/09/16
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
121
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
122
Lier des Textures
Objet de Texture
•  Lier les textures avec
GLuint texObject[2];
// objet texture
glGenTextures(2, texObject);
// génère un nouvel objet de texture
glBindTexture( target, id );
•  attribuer une id de texture à un type de texture
•  3 sortes de textures
•  GL_TEXTURE_1D
•  GL_TEXTURE_2D
•  GL_TEXTURE_3D
// LierTexture 1
glBindTexture(GL_TEXTURE_2D, texObject[0]);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 256, 256, 0, GL_RGBA,
GL_UNSIGNED_BYTE, image1);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
// Lier Texture 2
glBindTexture(GL_TEXTURE_2D, texObject[1]);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 256, 256, 0, GL_RGBA,
GL_UNSIGNED_BYTE, image2);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_BLEND);
•  Exemple
glBindTexture(GL_TEXTURE_2D, texIds[0]);
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
123
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
124
Génération automatique des
Coordonnées de Texture
Objet de Texture
// Une sphère avec texture 1:
glBindTexture(GL_TEXTURE_2D, texObject[0]);
glutSolidSphere(1.0, 16, 16);
•  OpenGL peut générer les coordonnées de
texture automatiquement
glTexGen{ifd}[v]()
// une théière avec texture 2:
glBindTexture(GL_TEXTURE_2D, texObject[1]);
glutSolidTeapot(1.0);
…
•  spécifier un plan
•  génère des coordonnées de texture en fonction de la
distance au plan
•  modes de génération
•  GL_OBJECT_LINEAR
•  GL_EYE_LINEAR
•  GL_SPHERE_MAP (utilisé pour les cartes
environnementales)
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
125
Génération automatiquedes
Coordonnées de Texture
•  glTexGen{ifd}(coord, pname, param)
coord : GL_S, GL_T, GL_R or GL_Q
pname : GL_TEXTURE_GEN_MODE
param : GL_OBJECT_LINEAR, GL_EYE_LINEAR ou
GL_SPHERE_MAP
pname : GL_OBJECT_PLANE ou GL_EYE_PLANE,
param : p1, p2, p3, p4 (param de génération de texture)
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
126
Automatic Texture-Coordinate
Generation
1/4
•  void glTexGen{ifd}[v](GLenum coord, GLenum pname,
TYPEparam);
•  coord can be GL_S, GL_T, GL_R, GL_Q
pname
param
GL_TEXTURE_GEN_MODE
GL_OBJECT_LINEAR,
GL_GL_EYE_LINEAR,
GL_SPHERE_MAP
Plane coefficient array
Plane coefficient array
GL_OBJECT_PLANE
GL_EYE_PLANE
21
22/09/16
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
127
Génération automatique des
Coordonnées de Texture
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
128
Génération automatique des
Coordonnées de Texture
•  Tableau de coefficient du plan
•  Environnement Map
•  Appliquer le code suivant
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE,
GL_SPHERE_MAP);
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE,
GL_SPHERE_MAP);
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
•  Plan généré = p1X + p2Y + p3Z + p4W
•  p1, p2, p3, p4 : composants du tableau.
•  GL_TEXTURE_GEN_MODE
•  (a) GL_OBJECT_LINEAR avec plan x = 0
•  (b) GL_OBJECT_LINEAR avec plan x+y+z = 0
•  (c) GL_EYE_LINEAR avec plan x = 0
•  La constante GL_SPHERE_MAP crée les coordonnées de texture pour
l’environnement mapping
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
129
Génération automatique des
Coordonnées de Texture
Sphere Map
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
130
Placage de texture 2D avec OpenGL
Object with Environment Map
•  spécifier les données de la texture
•  lire les données ou les générer
•  associer les données à un objet de texture
•  spécifier les paramètres du placage
•  correction de la perspective
•  comportement au niveau des bords
•  post-filtrage
•  combinaison avec le fragment
•  dessiner la (les) primitive(s)
•  activer la texture
•  associer des coordonnées de textures à chaque vertex
(manuellement ou automatiquement)
Ne fonctionne qu’en RGBA
22/09/16
S. Lanquetin – L3 Info, Synthèse d’images
131
Tutorial: Texture
22

Documents pareils