Forum de discussion
Forum « Flash et Shockwave » (archives)
Tout tout tout, vous saurez tout sur la matrice!!! j'avais promis!!!
Envoyé: 25 mars 2004, 3h39 par toph
alors, j'avais dit qu'un jour je ferai des recherches sur la fameuse matrice gradietn qui gère le remplissage avec un dégradé en ActionScript ...
et bien c'est chose faite ... c'est enfait très simple. Déjà je précise queje parle de la matrice 3*3, et non de l'autre, qui avait l'air très simple, mais n'a jamais marchée pour moi...
Alors avant de me lancer dans des explications que je sens déjà cafouilleuses, je redéfinie la matrice et ensuite je donne ma traduction :
la matrice 3*3 est définie ainsi sous flash
a b c
d e f
g h i
il faut savoir que la notion de gradient est une notion de 3D ce qui implique un x, un y et un z....
en fait, chaque colonne correspond à une dimension: la première est x, la deuxième y, et la dernière z (du coup, en flash, elle sert à rien, mais faut la mettre qd même)
ma traduction est la suivante :
dx dy dz
vx vy vz
Ox Oy Oz
alors, le dx, (dy, dz) définit la largeur du dégradé, le vx (vy, vz) définit la direction (le vecteur) du dégradé (Attention, c'est de la médiatrice dont il est question, c'està dire que pour un dégradé horizontal, la direction - du moins dans la matrice - est une droite verticale) et enfin, Ox (Oy, Oz) est le point d'origine de ce vecteur...
Je pense que pour concevoir un dégradé il faut partir du point d'origine...
prenons un exemple simple :
je veux faire un dégradé va du blanc vers le noir, vertical, dans un carré de 300 sur 500 pixels...
le point d'origine de ce dégradé -dans la matrice je parle- sera le milieu de ce carré (encore une fois, attention, il ne faut pas prendre comme repère le carré, mais la scène (clip) dans lequel il va être dessiné : si mon carré est situé à x=200, y=150, il faudra rajouter ces coordonnées aux coordonneés du milieu du carré...
Donc, ce point d'origine se réfert à l'origine du clip et surtout pas à la forme qu'on est entrain de dessiner.
Mon point d'origine sera donc Ox = x + 300/2 = 400, et mon Oy = y + 500/2 = 375
et z=0;
esuite mon dégradé va de haut en bas donc, il faut que je définisse un vecteur (vx,vy,vz) horizontal (peu importe la valeur) , disons donc (1,0,0)- uniquement la composante x nous intéresse...
ensuite vient le problème de la largeur du dégradé (dx,dy,dz) ... dans notre cas, le dégradé est vertical, donc sa largeur sera également verticale ... disons que l'on veut que notre dégradé ne fasse que la moitié de la hauteur du carré (qui en fait est un rectangle ;), on fera (dx,dy,dz) = (0,500/2, 0) = (0,250,0) ...
et voilà le tour est joué ne reste qu'à remplir la matrice...
dx dy dz 0 250 0
vx vy vz = 1 0 0
Ox Oy Oz 400 375 0
voilà, si le dégradé est pas dans le bon sens, il suffit, soit d'inverser la direction avec un '-' = (-1,0,0)... ou alors, tout betement d'échanger les deux couleurs...
Voili, voilà, faites des test, ça marche vraiment, mais ça n'a rien a voir avec un gradient ou alors de très loin ...mais on peut faire l'analogie entre la direction qui serait la défrivé du point d'origine (ou l'intégrale plutôt) et la largeur qui en serait la double intégrale, donc quelque part ça se tient ... mais je pense que mes cours d'électromag sont quand même trop loin pour argumenter sur un éventuel abus de langage des programmeurs flash...
Bref, j'espère en tout cas que j'ai été clair... il est 2heures du mat et je sature un peu... mais je voulais partager cette découverte...
Je vous conseille d'essayer (toujours en dessiner le truc sur un papier avant) n'oubliez pas un dégradé, c'est un point d'origine, une direction et une largeur ... voilà, et pi, si vous avez des questions n'hésitez pas...
Sur ces bonnes paroles, j'vais faire dodo
A plus
Toph'
Réponses
|