> Graphisme
PrograZine issue #10 - http://www.citeweb.net/discase/10/geiss.htm Edito Sommaire Contribution Contacts


L'effet Geiss
par Plouf - plouf@win.be http://www.citeweb.net/pmplayer
Initié Win9x Delphi

     Pour une fois, ça va être très court, je suppose que vous connaissez déjà l'effet feu et que vous avez eu l'occasion de vous y entrainer. Si ça n'est pas le cas, je vous signale qu'il y a de très bon tuts sur l'effet feu dans les numéros précédants de prograzine.

    Pour ceux qui conaissent le plugin winamp "geiss", je vous propose de vous expliquer son principe. Si vous ne conaissez pas ce plug-in, sachez néamoins que vous l'avez forcément déjà vu quelque part vu qu'il est très fréquent ces derniers temps.

    Le geiss n'est en fait qu'une simple extension de l'effet feu.

    Pour rappel : l'effet feu se résume comme ceci : (en 320x200)
For Pixel:=0 To 63999 Do Begin
  Ancien_Pixel:=Pixel+320;
  Nouvelle_Couleur:=(Ecran[Ancien_Pixel]+Ecran[Ancien_Pixel+1]+Ecran[Ancien_Pixel+320]+Ecran[Ancien_Pixel-321]) Div 4;
  Nouvel_Ecran[Pixel]:=Nouvelle_Couleur;
End;
l

    Toute l'astuce du geiss se trouve dans la modification de la seconde ligne : dans l'effet feu, on prend systématiquement le pixel se trouvant en dessous du pixel actuel (+320). Ici on se propose de prendre n'importe quel pixel. Ca veut dire que l'on fait un random? Non, mais au lieu de prendre le pixel du bas, on va prendre le pixel associé et défini dans une table de 64000éléments.
Var Attache:Array[0..63999] Of Word;
l

    Ce qui fait qu'on obtient :
For Pixel:=0 To 63999 Do Begin
  Ancien_Pixel:=Attache[Pixel];
  Nouvelle_Couleur:=(Ecran[Ancien_Pixel]+Ecran[Ancien_Pixel+1]+Ecran[Ancien_Pixel+320]+Ecran[Ancien_Pixel-321]) Div 4;
  Nouvel_Ecran[Pixel]:=Nouvelle_Couleur;
End;
l

    Toute le travail restant étant d'initialiser cette table Attache. Une fois encore, si vous initialisez votre table de la façon suivante : For I:=0 To 63999 Do Attache[I]:=I+320; vous retrouvez l'effet feu.

    Mais si à présent vous dites que chaque pixel prend comme source un pixel un peu plus proche du centre, vos obtenez une déformation de l'image un peu "effet tunel", à l'inverse, si vous prenez un pixel plus à l'extérieur, vous obtenez une sorte de rétrécissement.

    A vous de trouver à quelles tables correspondent les effets de sphérisation et de rotation de Geiss, mais croyez-moi, il ne s'agit que d'un problème de table. En gros, quel que soit l'effet affiché, le calcul réalisé est le même, seule la table diffère.
Cet article est la propriété de Plouf. La copie et la diffusion sont libres sauf dans un but lucratif sans accord explicite de l'auteur.