La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

GRAPHISME PAR ORDINATEUR

Présentations similaires


Présentation au sujet: "GRAPHISME PAR ORDINATEUR"— Transcription de la présentation:

1 GRAPHISME PAR ORDINATEUR
SIF-1032

2 Contenu du cours 10 Textures Lectures (Chapitre 8)
Définir la texture Superposition d’une texture sur une surface plane Superposition d’une texture sur une surface courbe Lectures (Chapitre 8) Site NeHe: Leçons 6 et 7 NeHe’s OpenGL Tutorials: Chapitres 6 et 7 OpenGL Programming Guide: Chapitre 9 Textures (OpenGL 3.3+)

3 Textures Les textures 2D sont généralement des images de format .bmp Les textures 2D servent à remplacer des surfaces de géométrie complexe (ex: briques sur des murs) La superposition des textures sur des surfaces consiste à projeter l’espace de la texture représentée par des coordonnées (s,t) dans un plan dont les coordonnées sont données par des triplets (x,y,z)

4 Textures Exemples de superposition de textures 2D sur des surfaces (Voir leçon 6 de NeHe)

5 Textures Exemples de textures 2D (image .bmp, générée)

6 Textures Superposition des textures: transformation de l’espace des textures vers l’espace des surfaces World/Screen Texture/World

7 Textures Superposition des textures: transformation de l’espace des textures vers l’espace des surfaces

8 Textures Superposition des textures: transformation de l’espace des textures vers l’espace des surfaces TEXTURE SURFACE Transformation spatiale (x, y,z) Affectation de la couleur

9 Définir les textures images 2D (voir leçon 6)
texture[]: une liste de pointeurs de texture

10 Définir les textures images 2D (voir leçon 6)
AUX_RGBImageRec *texture1 crée un enregistrement pour le premier bitmap chargé et utilisé comme texture. Cet enregistrement contient les données RGB de l’image .bmp auxDIBImageLoad() charge l’image .bmp (ex: NeHe.bmp) et la stocke dans l’enregistrement texture1

11 Définir les textures images 2D (voir leçon 6)
glGenTextures(1, &texture[0]) indique à OpenGL que nous voulons construire une texture et qu’elle soit stockée dans l’entrée 0 de texture[] glBindTexture(GL_TEXTURE_2D, texture[0]) indique à OpenGL que texture[0] (la première texture) sera une texture 2D glBindTexture() permet à OpenGL de pointer sur une zone mémoire où sera stockée la texture (&texture[0]). À la création de la texture elle est stockée dans cet emplacement de mémoire. Après, si un lien à la mémoire est effectué, OpenGL lira la texture correspondante à partir de cet emplacement de mémoire RAM

12 Définir les textures images 2D (voir leçon 6)
Ces fonctions permettent de spécifier le type de filtrage utilisé quand l’image est plus grande (GL_TEXTURE_MAG_FILTER) à l’écran que la texture l’est en réalité, ou quand l’image est plus petite (GL_TEXTURE_MIN_FILTER) sur l’écran comparativement à la texture GL_LINEAR donne un aspect lisse à notre texture de proche ou de loin à l’écran. L’utilisation du paramètre GL_LINEAR se traduit par une charge de travail importante pour la carte vidéo ce qui peut ralentir notre système GL_NEAREST donne une texture beaucoup moins lisse et quand elle est agrandie à l’écran les formes de la texture deviennent carrée

13 Définir les textures images 2D (voir leçon 6)
Création de la texture. Indique à OpenGL que la texture est 2D (GL_TEXTURE_2D). 0 représente le niveau de détail des images, habituellement à 0. 3 est le nombre de composantes de couleurs (RGB). texture1->sizeX donne automatiquement la largeur de la texture. texture1->sizeY donne la hauteur de la texture. Le zéro suivant est la bordure, habituellement laissé 0. GL_RGB indique à OpenGL que l’image est RGB. GL_UNSIGNED_BYTE représente la dimension en octet des composantes de couleurs de chaque pixel des images (unsigned char). texture1->data indique à OpenGL où sont stockées les données images associées à une texture

14 Définir les textures images 2D (voir leçon 6)
LoadGLTextures() permet de charger l’image .bmp et permet la création de la texture glEnable(GL_TEXTURE_2D) active le mode texture mapping

15 Définir les textures images 2D (voir leçon 6)
La fonction glBindTexture() permet de sélectionner la texture utilisée. Pour les autres textures il faudrait appeler la fonction glBindTexture(GL_TEXTURE_2D, texture[numéro de texture]). Il faut appeler cette fonction hors des énoncés glBegin() et glEnd().

16 Définir les textures images 2D (voir leçon 6)
La fonction glTexCoord2f() permet de définir les coordonnées de textures. La première, la coordonnée x (s). 0.0f est à gauche de la texture. 0.5f dans le milieu et 1.0f à droite. La seconde, la coordonnée y (t). 0.0f est le bas de la texture. 0.5f est le milieu et 1.0f dans le haut.

17 Textures Définir les textures images 2D (voir leçon 6)

18 Définir les textures images 2D (voir leçon 6)
La face frontale du cube est couverte avec la portion inférieure gauche de la texture

19 Textures Définir les textures images 2D (voir leçon 6)

20 Définir les textures images 2D (voir leçon 6)
La face frontale du cube est couverte avec la portion supérieure droite de la texture

21 Textures Définir les textures images 2D (voir leçon 6)

22 Définir les textures images 2D (voir leçon 6)
La face frontale du cube est couverte avec une répétition de la texture de 2 en x et y

23 Textures Définir les textures images 2D (voir leçon 6)

24 Définir les textures images 2D (voir leçon 6)
La face frontale du cube est couverte avec une répétition de la texture de 4 en x et de 2 en y

25 Textures Définir les textures images 2D (voir leçon 6)

26 Définir les textures images 2D
La fonction glTexImage2D() permet de définir une texture image 2D avec OpenGL Paramètres: Type de texture: GL_TEXTURE_2D Niveau de détail: 0 en général Nombre de composantes de couleur (1 à 4) Largeur de la texture image (puissance de 2 [64, 256]) Hauteur de la texture image (puissance de 2 [64, 256]) Largeur de la bordure (0, 1 ou 2) Format des pixels (ex: GL_RGB, GL_RGBA ..) Type de chaque valeur des pixel (ex: GL_UNSIGNED_BYTE) Séquence de pixels

27 Définir les textures images 2D
Modes de rendu de texture (couleur VS illumination) GL_MODULATE: permet de faire le rendu des surfaces texturées en considérant les propriétés des surfaces (couleurs, propriétés de réflexion) et l’illumination. Ce mode est celui par défaut et le plus utilisé GL_DECAL: seule l’information texturale sert à faire le rendu la couleur, les propriétés des surfaces et l’illumination ne changent en rien l’apparence de la texture GL_BLEND: permet la superposition de textures

28 Définir les textures images 2D Modes de rendu de texture
Le mode de rendu de texture est initialisé par la fonction glTexEnvi() Paramètres: Type d’environnement texture: GL_TEXTURE_ENV Paramètre à définir: GL_TEXTURE_ENV_MODE (mode) GL_TEXTURE_ENV_COLOR (mode GL_BLEND) Mode ou couleur: modes: GL_MODULATE, GL_DECAL, GL_BLEND couleur: pointeur sur une valeur RGBA

29 Définir les textures images 2D
Type d’interpolation utilisée pour déterminer la couleur correspondant à chaque point d’une surface projetée sur la texture GL_NEAREST: le voisin le plus proche GL_LINEAR: interpolation linéaire La fonction glTexParameteri() permet d’établir le mode d’interpolation Paramètres: Type de texture: GL_TEXTURE_2D Paramètre à définir: GL_TEXTURE_MIN_FILTER: réduction de la texture GL_TEXTURE_MAG_FILTER: agrandissement de la texture

30 Définir les textures images 2D
La fonction glTexParameteri() permet d’établir le mode d’interpolation Paramètres: Type d’interpolation: GL_NEAREST GL_LINEAR

31 Définir les textures images 2D
Spécification des coordonnées de texture par la commande glTexCoord2d() avec comme paramètres les coordonnées de texture s et t Ces coordonnées sont contenues dans l’intervalle [0.0,1.0]

32 Définir les textures images 2D
Répétition de texture Quand les coordonnées de textures sortent de l’intervalle [0,1], nous pouvons imposer soit une répétition de la texture complète (GL_REPEAT) ou une répétition de la couleur correspondant à la bordure de la texture (GL_CLAMP)

33 Définir les textures images 2D
Répétition de texture Les procédures: glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S, GL_REPEAT) glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T, GL_REPEAT) permettent d ’établir le mode de répétition de texture

34 Définir les textures images 2D
Répétition de texture (GL_CLAMP, voir leçon 6)

35 Définir les textures images 2D
Répétition de texture (GL_CLAMP, Voir leçon 6)

36 Définir les textures images 2D
Manipulation de plusieurs textures image La fonction glGenTextures() permet à OpenGL de réserver un ou plusieurs numéros (nom, référence) d’objet texture Gluint texture_objects[5]; glGenTextures(5,texture_objects); Gluint texture_object; glGenTextures(1,&texture_object);

37 Définir les textures images 2D
Manipulation de plusieurs textures image La fonction glBindTexture() permet de sélectionner un objet texture nommé par glGenTextures() Gluint texture_object; glGenTextures(1,&texture_object); glBindTexture(GL_TEXTURE_2D,texture_object);

38 Superposition d’une texture sur une surface plane
Exemple de superposition de texture (Voir projet Terrain1, terrain et ciel bleu) En premier lieu, nous avons besoin d’une fonction qui permet de charger la texture image (.bmp) La fonction TextureLoad() permet de faire ce chargement: Paramètres: Nom de fichier .bmp contenant la texture 2D Indicateur d’utilisation d ’image RGBA Min filter Mag filter Répétition

39 Textures

40 Textures (fonction TextureLoad())

41 Textures (fonction TextureLoad())

42 Textures (fonction TextureLoad())

43 Textures (Land.bmp, sky.bmp)

44 Textures (fonction Redraw(), ciel)

45 Textures (fonction Redraw(), terrain)

46 Textures (fonction Redraw(), terrain + ciel)

47 Textures (fonction Redraw(), ciel)

48 Textures (fonction Redraw(), terrain)

49 Textures (fonction Redraw(), terrain)

50 Textures (fonction Redraw(), terrain)

51 Superposition d’une texture sur des surfaces planes
Génération d ’un terrain par fractal (Voir projet Terrain2) Algorithme fractal subdivise une surface plane et ajuste la hauteur des points milieux de façon aléatoire tp[].v

52 Textures (fonction Redraw(), fractal)

53 Textures (fonction BuildTerrain(), fractal)

54 Textures (fonction DivideTerrain(), fractal)
// Élévation

55 Textures (fonction DivideTerrain(), fractal)

56 Superposition d’une texture sur des surfaces planes
Génération automatique de coordonnées de texture La fonction glTexGen<t> permet d ’établir les paramètres de génération automatique de coordonnées de texture Cette fonction permet de générer les coordonnées (s,t) d ’une texture à partir des positions dans une forme de la scène glTexGeni(GL_S,GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR) SI GL_TEXTURE_GEN_MODE == GL_OBJECT_LINEAR ALORS Chaque sommet des objets est multiplié par le vecteur définit par GL_OBJECT_PLANE glTexGenfv(GL_S ,GL_OBJECT_PLANE, s_vector) s_vector représente une fonction de projection

57 Superposition d’une texture sur des surfaces planes
Génération automatique de coordonnées de texture s_vector représente une fonction de projection glEnable(GL_TEXTURE_GEN_S) permet à OpenGL d’utiliser une séquence de coordonnées de texture générée

58 Superposition d’une texture sur des surfaces planes
Génération automatique de coordonnées de texture glTexGeni(GL_S,GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP) SI GL_TEXTURE_GEN_MODE == GL_SPHERE_MAP ALORS Les coordonnées de texture sont générées dans une sphère par rapport à la position de visualisation ou l ’origine

59 Textures (Fonction Redraw(), projet Terrain3)

60 Textures (Fonction Redraw(), projet Terrain3)
// Calcul par rapport à l ’observateur

61 Textures (Fonction Redraw(), projet Terrain3)

62 Textures (Avec Illumination, projet Terrain5)
Ajout de l ’illumination et des normales à chaque surface N

63 Textures (Avec Illumination, projet Terrain5)

64 Textures (Avec transparence, projet Terrain6)

65 Textures Superposition d’une texture sur une surface courbe

66 Textures (OpenGL 3.3+) Découpage dans une texture (U,V => x, y, z)

67 Lecture d’une image .bmp (texture)
Textures (OpenGL 3.3+) Lecture d’une image .bmp (texture) Prototype de la fonction loadBMP_custom() Appel de la fonction loadBMP_custom() Code de la fonction (déclarations)

68 Textures (OpenGL 3.3+) Code de la fonction (ouverture du fichier) Code la fonction (lecture de l’entête)

69 Textures (OpenGL 3.3+) Code de la fonction (validation du format d’image) Code de la fonction (lecture des dimensions) Code de la fonction (assignations)

70 Textures (OpenGL 3.3+) Code de la fonction (lecture de l’image) Création de la texture

71 Textures (OpenGL 3.3+) Lecture d’une image (uvtemplate.bmp)

72 Textures (OpenGL 3.3+) Utilisation des textures avec OpenGL (vertex shader)

73 Textures (OpenGL 3.3+) Utilisation des textures avec OpenGL (fragment shader)

74 Code du programme utilisant les textures (voir:
Textures (OpenGL 3.3+) Code du programme utilisant les textures (voir: Création d’une référence sur l’échantillonneur de texture

75 Textures (OpenGL 3.3+) Code du programme utilisant les textures (coordonnées des sommets et de texture)

76 Textures (OpenGL 3.3+) Code du programme utilisant les textures (coordonnées des sommets et de texture)

77 Textures (OpenGL 3.3+) Code du programme utilisant les textures (coordonnées de texture, Blender)

78 Textures (OpenGL 3.3+) Code du programme utilisant les textures (création d’un tampon pour stocker les coordonnées de texture) Associer la TEXTURE0 à la texture lue (Texture)

79 Textures (OpenGL 3.3+) Code du programme utilisant les textures (Attributions des tampons, traçage des triangles)

80 Textures (OpenGL 3.3+) Exemple d’exécution

81 Textures (OpenGL 3.3+) Exemple d’exécution Qualité du rendu est fonction du type d’interpolation

82 Textures (OpenGL 3.3+) Type d’interpolation (GL_NEAREST)

83 Textures (OpenGL 3.3+) Type d’interpolation (GL_LINEAR)

84 Type d’interpolation (GL_LINEAR)
Textures (OpenGL 3.3+) Type d’interpolation (GL_LINEAR) f (1, 0) f (1, 1) f (x, y) f (0, 0) 1, 0 x x, 0 x, y 0, 0 1, 1 y f (0, 1) x, 1 0, 1

85 Textures (OpenGL 3.3+) Type d’interpolation (MIPMAP, selon la profondeur la texture est adaptée en modifiant sa résolution)

86 Textures (OpenGL 3.3+) Type d’interpolation (MIPMAP, selon la profondeur la texture est adaptée en modifiant sa résolution)


Télécharger ppt "GRAPHISME PAR ORDINATEUR"

Présentations similaires


Annonces Google