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