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