Section Code L'interpolation Bi Linéaire, Une ptite explication des formules pour la bi-interpolation lineaire... t'as donc 4 valeurs (v1,v2,v3,v4) que tu veux interpoler dans un carré de 8*8 v1--------v2 | | | | | + | | v(x,y) | | | | | v3--------v4 la formule classique pour la biinterpolation est: v(x,y)=(1-x)(1-y)*v1+x(1-y)*v2+(1-x)y*v3+xy*v4, avec 0<=x<1 et 0<=y<1 d'ou en l'appliquant aux entiers sur du 8*8: v(x,y)=[(8-x)(8-y)*v1+x(8-y)*v2+(8-x)y*v3+xy*v4]/64 , avec 0<=x<8 et 0<=y<8 And Now, les gradiants... Les gradiants sont des dérivées mais partielles... donc des dérivées partielles... C'est le meme mecanisme que pour les dérivées par rapport à x (f '(x)=df(x)/dx) sauf qu'elles s'appliquent à toutes les variables (x,y,z,...) Je vais donc définir plusieurs gradiants (2 d'abord): dv(x,y)/dx et dv(x,y)/dy ... pour calculer la premiere, je dis dans ma tete que c'est x qui varie, par contre y est constant... et y'a qu'à dériver comme d'hab pour calculer la deuxieme, je dis dans ma tete que c'est y qui varie, par contre x est constant... et y'a qu'à dériver comme d'hab... okay ? d'ou: dv(x,y)/dx=[-(8-y)*v1+(8-y)*v2-y*v3+y*v4]/64 et dv(x,y)/dy=[-(8-x)*v1-x*v2+(8-x)*v3+x*v4]/64 Ce qui est important de remarquer ici c'est que dv/dx n'est pas constant, il dépend de y, ce qui signifie qu'il faut le faire varier quand y varie (à chaque début de ligne donc) d'ou le petit calcul de la variation de d[dv(x,y)/dx]/dy (soit en plus matheux: d²v(x,y)/dxdy...) d²v(x,y)/dxdy=[v1-v2-v3+v4]/64 Voila maintenant le remplissage de la mappe: qq variables plus explicatives: dleftv=dv(x=0,y)/dy=(-v1+v3)/8 dvdxdy=d²v/dxdy algo: v=v1 leftv=v1 dvdx=dv(x,y=0)=(-u1+u2)/8 pour y de 0 à 7 v=leftv pour x de 0 à 7 ici on a la valeur de v en (x,y) v=v+dvdx next x leftv=leftv+dleftv dvdx=dvdx+dvdxdy !!!! très important ceci ;) next y C'est bien beau tout ça, mais à quoi ça sert-il donc ? une réponse simple :bah pour faire des effets bi-linéairement interpolés bien sûr ! _ les effets 2d où les calculs sont très lourds, ça réduit de 64 leur nombre (pour du bi-linéaire 8*8) _ le RayCasting est un exemple d'effet 2d (oui bon faut un peu le trafficoter) pour lequel ça marche bien (cf les tunnels qui bougent et tournent dans tous les sens, les plans, et même les rendu temps réel de boules+ombre+lumière (avec un gros flou par dessus pour gommer les ptits bugs)) _ tiens on lit le mot bi-lineaire depuis tout à l'heure... bah pour le bilinear mapping ça marche aussi (les valeurs à interpoler sont les nuances de Rouge, Vert, Bleu) _ et avec un peu d'imagination plein d'autres trucs (les light maps, les shadow maps, pour eviter l'effet de marche d'escalier dû au zoom), etc etc vala, j'y vais, peut être d'autres zarticles un de ces 4 ... à plous ! Cyg / BLaBLa.