Synthèse d’images 3. Texture

download Synthèse d’images 3.  Texture

If you can't read please download the document

  • date post

    31-Dec-2015
  • Category

    Documents

  • view

    27
  • download

    4

Embed Size (px)

description

Synthèse d’images 3. Texture. Licence Pro 2005-2006 Sébastien THON IUT de l’Université de Provence, site d’Arles Département Informatique. 1. Problématique Modèle de Phong : prise en compte des interactions lumière/matière, mais ce n’est pas suffisant. - PowerPoint PPT Presentation

Transcript of Synthèse d’images 3. Texture

  • Synthse dimages

    3. TextureLicence Pro 2005-2006

    Sbastien THON

    IUT de lUniversit de Provence, site dArlesDpartement Informatique

  • 1. Problmatique

    Modle de Phong : prise en compte des interactions lumire/matire, mais ce nest pas suffisant.

    Manque de ralisme dune scne nutilisant que le modle dillumination de Phong.

  • Solution : utilisation de textures.

  • Plaquage de textures (texture mapping)Plaquage dimages 1D, 2D ou 3D sur des primitives gomtriques.

    Objectifs Simuler des matriaux (pierre, bois, ) Rduire la complexit (nb de polygones) dobjets 3D Simulation de surfaces rflchissantes

  • Exemple : SkyboxSimule un ciel (sky) avec un cube (box) sur les 6 faces internes duquel on plaque des textures. Lobservateur reste toujours au centre du cube. Trs utilis dans les jeux (Quake, Half-Life, Call of Duty, )

  • Exemple : plaquages plus complexesOn utilise souvent un logiciel de modlisation 3D (3DS Max, Maya, etc.), qui calculera automatiquement les coordonnes de texture selon un mode de projection de la texture sur lobjet (ici, projection sphrique).Plaquage de textureTexture utilise

  • 2. Principe du plaquage de texture

    Espace de la textureEspace gometriqueEcranst0011

  • Les textures sont des images qui peuvent tre en 1D, 2D, 3D ou 4D. Les coordonnes de limage sont notes s, t, r, q.

    Ex: pour une texture 2D, un point dans limage est donn par ses coordonnes (s,t), le coin suprieur gauche tant (0,0) et le coin infrieur droit tant (1,1).

    st0011

  • Notes :

    Un pixel dune texture est appel texel.Dans OpenGL, les dimensions de la texture doivent tre une puissance de 2 (ce ne sera plus le cas dans OpenGL 2.0).Les dimensions des textures sont limites (dpend des cartes graphiques).

  • Notes :On regroupe souvent les textures dun mme objet dans une seule image acclre laffichage en vitant de changer de texture.

  • 3. Utilisation des textures dans OpenGL3 tapes :

    Spcifier la texture1.1 Lire ou gnrer une image1.2 En faire une texture1.3 Activer le plaquage de textureAssigner les coordonnes de texture aux points de lobjet 3DSpcifier les paramtres de texturesWraping, filtering,

  • 3.1 Spcifier la texture

    3.1.1 Lire ou gnrer une image

    BYTE *img;int largeur, hauteur;GLuint texture;

    glGenTextures(1, &texture);img = load_tga( "image.tga", &largeur, &hauteur );

  • Explication:Dans OpenGL, chaque texture est rfrence par un indice (entier). Pour obtenir ces indices, on utilise la fonction :

    glGenTextures(GLuint n, GLuint *tab_text);

    Qui cre n indices de textures et les place dans le tableau dentiers tab_text.

  • Ex: obtention dun ensemble dindices pour 10 textures ( tableau de 10 indices) :

    GLuint tab_text[10]; glGenTextures(10, tab_text);

    On peut aussi utiliser cette fonction pour ne demander quun seul indice :

    Ex: obtention dun indice pour une seule texture ( une seule variable entire) :

    GLuint texture; glGenTextures(1, &texture);

  • 3.1.2 En faire une texture

    Les textures doivent tre stockes dans la RAM de la carte graphique.Lorsquon charge une image pour en faire une texture, il faut ensuite la transfrer dans la RAM vido.

    glBindTexture(GL_TEXTURE_2D, texture); glTexImage2D( GL_TEXTURE_2D, 0, 3, largeur, hauteur, 0, GL_RGB, GL_UNSIGNED_BYTE, img);

  • Explication:glTexImage2D( target, level, components, w, h, border, format, type, *texels );

    target : GL_TEXTURE_1D, GL_TEXTURE_2D, GL_TEXTURE_3Dlevel : 0 sans mip-mappingcomponents : nombre dlments par texelw, h : dimensions de la texture (puissances de 2)border : bordure supplmentaire autour de limageformat : GL_RGB, GL_RGBA, ...type : type des lments des texelstexels : tableau de texels

  • La fonction glBindTexture() permet de dfinir lindice de la texture courante.

    Cette texture sera utilise pour toutes les oprations (plaquage, modification de paramtres, ) jusquau prochain appel de glBindTexture().

  • 3.1.3 Activer le plaquage de texture

    glEnable(GL_TEXTURE_2D);

    On peut aussi dsactiver le plaquage :

    glDisable(GL_TEXTURE_2D);

  • 3.2 Assigner les coordonnes de texture aux points de lobjet 3D

    Pour plaquer une texture sur un objet gomtrique, fournir les coordonnes de texture (normaliss entre 0 et 1). st(1, 0)(0, 0)(0, 1)(1, 1)(s, t) = (0.3, 0.2)(0.4, 0.8)(0.8, 0.6)ABCabcEspace de la textureEspace de lobjet

  • glBindTexture(GL_TEXTURE_2D, texture); glBegin(GL_TRIANGLES); glTexCoord2f(0.0f,0.0f); glVertex3f(4.0f, 5.0f, 0.0f); glTexCoord2f(1.0f,0.0f); glVertex3f(10.0f, 5.0f, 0.0f); glTexCoord2f(0.0f,1.0f); glVertex3f(4.0f, 12.0f, 0.0f); glEnd();

  • 3.3 Paramtres de textures

    Modes de filtrageRduction, agrandissementMip-mappingModes de bouclageRpter, tronquerFonctions de texturesComment mlanger la couleur dun objet avec sa texture

  • 3.3.1 Modes de filtrageRduction, agrandissementLes textures et les objets texturs ont rarement la mme taille (en pixels). OpenGL dfini des filtres indiquant comment un texel doit tre agrandit ou rduit pour correspondre la taille dun pixel.

  • glTexParameteri(target, type, mode);

    Avec :target : GL_TEXTURE_2D, ...type : GL_TEXTURE_MIN_FILTER, GL_TEXTURE_MAG_FILTERmode : GL_NEAREST, GL_LINEAR

    GL_NEAREST : la couleur du pixel est donne par celle du texel le plus proche.GL_LINEAR : la couleur du pixel est calcule par interpolation linaire des texels les plus proches.

  • GL_NEARESTGL_LINEAR

  • Ex:

    glBindTexture(GL_TEXTURE_2D, texture);

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

  • Mip-mappingProblme daliassage :

  • Solution : La technique de mip-mapping consiste en un prcalcul de plusieurs versions rduites dune mme texture.256 x 256128 x 12864 x 6432 x 32Dimensions : puissances de 2 (min : 1x1 texel) Approche le mcanisme de vision humaine : adapte le niveau de dtails en fonction de la distance.16 x 168 x 8

  • Permet de rduire les problmes daliassage.Sans mip-mappingAvec mip-mapping

  • Cration des textures de mip-mapping

    1) ManuelleOn dclare le niveau de mip-map lors de la dfinition de la texture :

    glTexImage2D( target, level, components, width, height, border, format, type, *texels );

  • 2) AutomatiqueOn utilise une fonction de OpenGL qui construit automati-quement les diffrentes textures de mip-map.

    gluBuild2DMipmaps( GL_TEXTURE_2D, components, width, height, format, type, *texels );

  • Dans les deux cas, il faut ensuite indiquer le mode de filtrage de la texture en indiquant quon veut sen servir en tant que mip-map :

    gluBuild2DMipmaps(GL_TEXTURE_2D, 3, width, height, GL_RGB, GL_UNSIGNED_BYTE, img);

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR);

  • 3.3.2 Modes de bouclage (Wrap)

    Ce mode indique ce qui doit se produire si une coordonne de texture sort de lintervalle [0,1].

    Deux possibilits :Rpter (Repeat)Tronquer (Clamp)

  • - Rpter

    Si le mode GL_REPEAT est utilis, pour les coordonnes 1, la partie entire est ignore et seule la partie dcimale est utilise.glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );

  • Exemple : Rptition dune texture en mode GL_REPEAT. Il faut crer une texture de telle sorte quelle boucle naturellement (ici, selon les 2 axes), sans quon voit les bords.

  • - Tronquer

    Si le mode GL_CLAMP est utilis, la valeur de la texture aux extrmes (0 ou 1) est utilise.glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP );

  • 3.3.3 Fonctions de textures

    Contrle la manire selon laquelle la texture est mlange la couleur de lobjet.

    glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, param );

    param peut prendre lune des valeurs suivantes : GL_DECAL : remplace la couleur par le texel. GL_MODULATE : multiplie le texel par la couleur.

  • GL_DECALRemplace la couleur donne par lillumination de Phong par celle du texel.glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);GL_MODULATEMultiplie la couleur donne par lillumination de Phong par celle du texel.glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

    rsultats plus ralistes

  • Exemple complet de lecture dune texture RGB et de son application sur un triangle

    // Dclarations de variables

    BYTE *img;int largeur, hauteur;Gluint texture;

    // Fin des dclarations de variables

  • // Cration dune texture// - lecture dune image// - chargement en mmoire vido// - rglage des paramtres de la texture

    glGenTextures(1, &texture);

    img = load_tga( "image.tga", &largeur, &hauteur );if( img != NULL ){ glBindTexture(GL_TEXTURE_2D, texture); glTexImage2D( GL_TEXTURE_2D, 0, 3, largeur, hauteur, 0, GL_RGB, GL_UNSIGNED_BYTE, img); delete[] img;}

  • glTexPara