Revenir au sommaire Tutoriaux

Attention il s'agit d'un source qu'il faudra aménager un peu pour Delphi. Si vous avez réalisé la transcription en Delphi merci de m'envoyer l'exemple ici: le Webmaster

Réaliser l'effet de GEISS(effet de feu) Par :
Plouf
(plouf@win.be ou theplouf@yahoo.com)
: 2Ko  
.
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 bons 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;
.
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;
.
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;
.
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.

Revenir au sommaire Tutoriaux

Hit-Parade