TEXTURE MAPPING


2D TEXTURE MAPPING
BUMP MAPPING
REFLEXION MAPPING
PROJECTION MAPPING
SELECTIVE MAPPING
PROCEDURAL MAPPING
3D TEXTURE MAPPING
IMAGE GENERATOR

















































MAPPINGS

Principel

         Being given a rectangular image I and any mesh G, the 2D texture mapping is to establish an homomorphism between G and an isomorphic mesh plotted on I.
         It is said that the image I is mapped to G if the color of each point of G is raised at the point corresponding to I.
         When I and G have different sizes, an average or pixel interpolation is necessary to avoid aliasing.
In real-time modeinteraction textures are supported by the graphics card (OpenGL functions).
The timed is not yet implemented, and only the following commands are taken into account:
texture vol(idv)=idm
texture fac(num)vol(idv)=idm
image(id1)vol(id2)

Assigning a texture

texture vol(id)=n2,2,r,v,b,f
Assignes texture n2 to volume n1
         The indicatot 2 indicates that it is a 2D texture
         (r,v,b) * volume + (1-(r,g,b)) * texture
         If f > 0, is the rate of color around which back color pixels will not be displayed (texture with hole).
         texture fac(n1) vol(n2)=n3,2,r,v,b,f Assignes texture n3 to facet n1 of volume n2.
Notes:
         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) yes texture needed
         3) Automatic antialiasing is done when the size of the facet is not the same as the texture.

Defining texture

generate image(id)poi(x,y)dim(nx,ny)
Loads window (x,y,x+nx-1,y+ny-1) of the current image in image id.
read image(id)name("nnn.eee")
Reads image file nnn.eee in image id.

Change texture

         All transformations on images are applicable:
Examples:
         rotx(PI/4) image(1)
         roty(PI/2)image (1)
         alea(.7,.3,.5)image(1)
         alex(.2)image(2)

multiple textures

         Several textures can be assigned to a volume (or on a facet)
Examples:
         texture(0) vol(1)=1,2: adds texture (1,2) to volume 1
         texture(2) vol(1)=1,2: cahnge texture 2 of volume 1
         texture(0) fac(3) vol(1)=1,2:adds texture to facet 3 of volume 1
         texture(2) fac(3) vol(1)=1,2: changes texture 2 of facet 3 of 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 object 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 radius) 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 radius 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 adjusté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 (no 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 pointer 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 pointer 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