MAPPINGS, TEXTURES


MAPPING 2D
BUMP MAPPING
MAPPING DE REFLEXION
MAPPINGS DE PROJECTION
MAPPES SÉLÉCTIVES
MAPPING PROCÉDURAL
EXTURES 3D
IMAGES GÉNÉRATRICES

















































MAPPING 2D

Principe

         Étant données une image rectangulaire I et un maillage quelconque G, l´opération de texture mapping 2D consiste à établir un homomorphisme entre G et un maillage isomorphe tracée sur I.
         On dit que l´image I est mappée sur G si la couleur de chaque point de G est relevée au point correspondant de I.
         Lorsque I et G ont des tailles différentes, une convolution ou une interpolation de pixels est nécessaire pour éviter l´aliasing.

En mode interaction temps réel les textures sont prises en charge par la carte graphique (fonctions OpenGL).
Le mode programmé n´est pas encore implémenté et seules les commandes suivantes sont prises en compte:
texture vol(idv)=idm
texture fac(num)vol(idv)=idm
image(id1)vol(id2)

Affecter une texture

texture vol(id)=n2,2,r,v,b,f
Affecte la texture numéro n2 au volume n1
         L´indicateur 2 précise qu´il s´agit d´une texture 2D
         Les 3 coefficients r,v,b (entre 0 et 1) mesurent l´importance de la couleur du volume par rapport a celle de la texture (0: texture seule, 1: volume seul)
         Si f est présent et positif, il mesure la proportion de couleurs autour de la couleur du back des pixels de la texture qui ne seront pas affichés. Par exemple, pour f=1, les pixels de la texture de la couleur du back ne seront pas affichés (texture "à hole").
         texture fac(n1) vol(n2)=n3,2,r,v,b,f Affecte la texture n3 à la facette n1 du volume n2.
Remarques:
         1) La couleur en un point de la surface est calculée en pondérant la couleur de la surface et la couleur du pixel de la texture ayant les mêmes coordonnées dans la texture (view comme maillage régilier) et la surface (view comme maillage oblique).
         2) Il faut faire ´yes texture´ pour rendre les mappes actives.
         3) Un antialiasing automatique est réalisé lorsque la taille de la facette est differente de celle de la texture.

Définir une texture

generate image(id)poi(x,y)dim(nx,ny)
Charge la fenêtre (x,y,x+nx-1,y+ny-1) de l´image courante dans l´image numéro id.
read image(id)name("nnn.eee")
Lit dans l´image id le fichier image nnn.eee.

Modifier une texture

         Toutes les transformations sur les images sont applicables aussi bien:
         À l´´image courante: transf image
         Qu´à une image donnée id: transf image(id)
Exemples:
         rotx(PI/4) image(1)
         roty(PI/2)image (1)
         alea(.7,.3,.5)image(1)
         alex(.2)image(2)
         etc...

Mappes multiples

         Plusieurs mappes peuvent être définies sur un même volume (ou sur une même facette d´un volume):
Exemples:
         texture(0) vol(1)=1,2: Ajoute la texture (1,2) au volume 1
         texture(2) vol(1)=1,2: Modifie la texture 2 du volume 1
         texture(0) fac(3) vol(1)=1,2: Ajoute une texture à la facette 3 du volume 1
         texture(2) fac(3) vol(1)=1,2: Modifie la texture 2 de la facette 3 du volume 1

BUMP MAPPING

Bump sur une image

texture vol(1)=1,4,.5,.4,.6: Définit un bump mapping (indicateur 4) sur l´image 1 et d´amplitude (.4,.5,.6): La normal en chaque point est bruitée par des coefficients (.4*r,.5*v,.6*b) avec (r,v,b) = couleur du point correspondant dans la texture
texture vol(1)=1,5,.5,.4,.6: Définit un bump mapping aléatoire (indicateur 4) sur l´image 1 et d´amplitude (.4,.5,.6): La normal en chaque point est bruitée par des coefficients (kr*r,kv*v,kb*b) avec (kr,kv,kb) appartenent à l´intervalle [0,.5]*[0,.5]*[0,.6] et (r,v,b) = couleur du point correspondant dans la texture

Bump sur une extension

         La normal en un échantillonnage de points est bruitée, les normales aux autres points sont interpolées

Affectation d´un bump sur une extension

ext vol(1)=20,1;alea ext vol(1)=.5: Définit une extension d´ordre 20 sur le volume 1 et un bruit d´amplitude .5 sur les normales aux points de l´extension
         L´extension (ici 20) contrôle le "grain" du bump (grain end si extension grande)
         L´aléatoire (ici .5) contrôle l´amplitude du bruit

MAPPING DE REFLEXION

Principe

         Une sphère imaginaire de très grand radius R, sur laquelle est mappée une image I, entoure la scène
         La couleur en chaque point d´un objet est relevée sur cette sphère par reflexion du radius joignant l´eye à ce point sur cette surface
         L´effet obtenu (comme un lancer de rayon) est celui de la réflexion d´un ciel

Affecter une texture de réflexion

         texture vol n1=n2,1,r,v,b,f
Affecte la texture numéro n2 au volume n1
         L´indicateur 1 précise qu´il s´agit d´une texture de réflexion
         Les 3 coefficients r,v,b (entre 0 et 1) mesurent l´importance de la couleur du volume par rapport à celle de la texture (0: texture seule, 1: volume seul) couleur de la texture par rapport à celle du volume
         Si f est présent et positif, il mesure la proportion de couleurs autour de la couleur du back des pixels de la texture qui ne seront pas affichés. Par exemple, pour f=1, les pixels de la texture de la couleur du back ne seront pas affichés (texture "a hole").
         texture fac(n1) vol(n2)=n3,1,r,v,b,f Affecte la texture n3 à la facette n1 du volume n2.
Remarque:
         La couleur en un point d´une surface est calculée en pondérant la couleur de la surface avec celle d´une texture fictive située sur une sphère englobant la scène, intersectée par le rayon symétrique de celui joignant l´eye au point par rapport à la noemale à la surface en ce point.

MAPPINGS DE PROJECTION

Projection plane

         La texture est ajustée à la boîte englobante de la projection du volume, puis est projetée frontalement sur lui. Syntaxe:
         texture vol(num_vol)=num_texture,6,cr,cv,cb
         num_vol = numéro du volume
         num_texture = numéro de l´image à mapper
         cr,cv,cb = coefficients d´influence de la couleur du volume (entre 0 et 1)

Projection sphérique

         La texture est mise fictivement sur une sphère englobant le volume, puis est projetée sur lui. Syntaxe:
         texture vol(num_vol)=num_texture,7,cr,cv,cb
         num_vol = numéro du volume
         num_texture = numéro de l´image à mapper
         cr,cv,cb = coefficients d´influence de la couleur du volume (entre 0 et 1)
         On peut fixer la texture au volume en faisant ´generate axis vol num´ à la construction du volume num, puis ´validate axis vol num´ chaque fois qu´il est modifié.

Remarques

         1) Pour mapper une image sur un volume quelconque (non nécessairement isomorphe à une grid).
         2) La projection plane introduit des déformations sur les facettes vues de profil
         3) La projection sphérique convient bien aux volumes convexes

MAPPES SÉLÉCTIVES

Mélange

         texture vol 1=1,2,.5,.3,.2: Mélange la texture avec la couleur du volume 1 selon la formule: couleur = (.5,.3,.2) * (volume) + (.5,.7,.8) * (texture)

Mappe à hole

         texture vol 1=1,2,0,0,0,.2: N´affiche pas les pixels de la texture dont la couleur est celle du back à 0.2 près. Si l´image 1 a été modifiée par: ´alex image(1)coe(.25)´ et/ou par ´aley image(1)coe(.3)´, les bords du volume 1 laisseront see le back par des trous

Mappe floue

         Si le type de la texture est plus grand que 10 et sin on a invoqué:
         ´col texture=r1,v1,b1,r2,v2,b2,dr,dv,db´
La texture ne s´affichera qu´en les points de couleur (r,v,b) comprise entre (r1,v1,b1) et (r2,v2,b2), (dr,dv,db) fixe la zone de transition (0.2 par defaut)
Exemples:
         col texture=0,0,0,.3,.3,.3: Affiche les mappes dans les ombres
         col texture=.3,.3,.3,0,0,0: Affiche les mappes dans les parties éclairées
         col texture=.7,.7,.7,1,1,1: Affiche les mappes dans les parties éclairées
         col texture=.3,.3,.3,.6,.6,.6: Affiche les mappes dans [.3,.6]
         col texture=.6,.6,.6,.3,.3,.3: Affiche les mappes dans [0,.3] et [.6,1]

MAPPING PROCÉDURAL

En langage anyflo

----------------- texture vol(n1)=n2,"toto",list_de_parametres
         Si ´yes illum´ et ´yes texture´ sont actifs, lors de l´affichage du volume n1, la couleur de chacun de ses pixels sera calculée par la fonction toto, une telle fonction doit être de la forme:
         toto(list_de_parametres)
         {
         p = poi /* Récupére les coordonnées absolues du pixel affiche */
         k = col /* Récupére la couleur de ce pixel */
         n = normal /* Récupére la normal en ce point */
         k = fonction(p, k, n) /* Calcul de la couleur */
         n2 = number texture /* Récupére le numéro de la texture */
         col(k) /* Passer cette valeur */
         }
Remarque: En cours d´implémentation /*????????????????*/

En langage C

texture vol(n1)=n2,list_de_parametres, avec n2 < 0
         Il faut modifier la fonction texture_utilisateur() du fichier utilb.c

TEXTURES 3D

Principe

         Au lieu de mapper une image 2D sur une surface, on "plonge" le volume dans une "image 3D", exactement comme si on sculptait un bloc coloré
         La mémorisation d´une image 3D prend une place considérable, aussi définit-on des textures "procédurales", c´est à dire que la couleur en un point (x,y,z) est une fonction k(x,y,z) des coordonnées de ce point

Texture à pôles de couleurs

         LIBRE vol n=1,n,D1,D2,...,Dn
         L´indicateur 1 précise le type de la LIBRE avec Di=r1,r2,r3,r4,r5,v1,v2,v3,v4,v5,b1,b2,b3,b4,b5
La couleur au point(x,y,z) est calculée par la formule:
         r = SIGMA(de 1 a n) (r1 * sin(2*PI*r2+distance((x,y,z),(r3,r4,r5))))
         v = SIGMA(de 1 a n) (v1 * sin(2*PI*v2+distance((x,y,z),(v3,v4,v5))))
         b = SIGMA(de 1 a n) (b1 * sin(2*PI*b2+distance((x,y,z),(b3,b4,b5))))
         r1,v1,b1 sont des amplitudes
         r2,v2,b2 sont des frequences
         r3,r4,r5 v3,v4,v5 et b3,b4,b5 sont les coordonnees de poles de couleurs

Turbulances

         LIBRE vol n=2,r,v,b
         L´indicateur 2 précise le type de la LIBRE r,v,b est la couleur de la LIBRE (entre 0.000001 et 1)

Textures interpolées

         LIBRE vol n=3,n1,z1,n2,z2
         ni = numéro d´une image
         zi = profondeur (par rapport à l´eye) de l´image ni
         La couleur au point (x,y,z) est calculée par interpolation, sur les z, des couleurs en (x,y) des images n1 et n2

Bump mapping

         LIBRE vol n=4,dx,dy,dz
         La normal est bruitée de (dx,dy,dz)

Textures de Perlin

         LIBRE vol n=6,... /*??? A FAIRE ???*/

Bump mapping aléatoire

         LIBRE vol n=5,dx,dy,dz
         La normal est bruitée dune quantité aléatoire d´amplitude (dx,dy,dz)

Textures procédurales (en langage anyflo)

         LIBRE vol n="toto"
         toto est une fonction, écrite en langage ANYFLO, qui sera exécutée à l´affichage de chaque pixel. Dans cette fonction, la commande ´poi´ retourne les coordonnées absolues du point actuellement affiché, ´normal´ retourne la normal à la surface en ce point et ´col´ retourne sa couleur. La commande ´col(r,v,b)´ permet alors de définir la couleur en ce point
Exemple:
         toto()
         {
         /* Extraire les coordonnees du point actuellement affiche */
         w=poi
         x = w[0];y = w[1]; z = w[2]
         /* Calculer la couleur en fonction des coordonnees */
         r = abs cos x/10
         v = abs sin y/12
         b = abs cos (x+y)/20
         /* Affecter la couleur */
         col(r,v,b) }

Textures procédurales (en C)

         LIBRE vol n=c,datas
         Si c < 0 la fonction
         texture3d_utilisateur(c,n,pd,cont,p_col) sera exécutée à l´affichage de chaqe pixel
Remarques:
         1) Cette fonction se trouve dans le fichier utilb.c du directory de l´environnement (contenant aussi d´autres fonctions d´interface)
         Il sera nécessaire de le modifier et de relinker ANYFLO.
         2) c = code: Permet de traîter plusieurs types de textures
         n = nombre de datas
         pd -> n datas (en float de 32 bits)
         cont est un pointeur de type struct Contour vesr le point
         cont->xa, cont->ya et cont->za sont les coordonnées absolues
         cont->nx, cont->ny et cont->nz est la normal unit
         p_col est un pointeur flottant vesr la couleur (à modifier)

IMAGES GÉNÉRATRICES

Principe

         Une image numérique peut être considérée comme une application d´un espace discret et fini à 2 dimensions dans un espace discret et fini à 3 dimensions:
         pixel(x,y) -> couleur(r,v,b ou hsv)
Cette application, considérée comme un field, peut servir à modifier une base de données

Modifications géométriques

         On peut par exemple définir le z en un point de l´écran comme une fonction de la couleur en ce point
         On peut aussi redéfinir la position d´un point de l´écran en fonction de la couleur en ce point
         La fonction ´adjust vol image´ permet de modifier les coordonnées des sommets d´un volume placé front une image en fonction des couleurs situées sous ces sommets
         Les déplacements peuvent se faire dans une direction quelconque
         Le volume peut automatiquement être frame front l´image
         Les paramètres signifiants peuvent être le (rvb) ou le (hsv)
         Le volume peut prendre la couleur située sous lui
         La fonction de déplacement peut être standard, programmee en langage anyflo ou programmee en C (il faudra alors modifier le fichier utilb.c et rlinker anyflo)

Modifications dynamiques

         Si un field de force est défini par la couleur en un point, une image peut servir à générer des mouvements
         La fonction ´field image vol´ répond à cette question