lettres en feu
voici un petit effet simple est trés impressionnant, afficher des lettres enflammé ! en 320x200 et 256 couleur
non jean kevin, on fera pas de tete de mort enflammé !
là c'est pas trés impressionnant parce que ça bouge pas ! mais normalement ça fait un beau H=EDM2 en flammes !
Premiere etape : theorie : smooth vertical
La théorie, c'est quand on
comprend mais que ça ne marche pas.
comment ça marche ?
en fait c'est tout con ça repose sur une chose
essentielement.
pour calculer chaque pixel on fait la moyenne des pixel qui se
trouve en dessous comme ça :
O represente le pixel dont on veut determiner sa couleur
X sont les points necessaire pour calculer sa couleur
X | O | X |
X | X | X |
X | X | X |
on fait la moyenne des couleur de tout les X et on obtient la couleur de O
Deuxieme
etape : pratique : les lettres !
La pratique, c'est quand
ça marche mais que l'on ne comprend pas.
pour dessiner les lettres ? pas de casse tete juste 1 adresse ! une adresse ? YES ! mais quel adresse ?
F000F:A6EL
comment donc afficher les lettres grace a cette adresse ? et
bin comme ça :
vram correspond a l'adresse de la memoire video
void BltText(char
far *text, int x, int
y, unsigned char color,unsigned
char G){ int offset = (y << 8) + (y<<6) + x, oldx=x; unsigned char far *romptr, *charset = (unsigned char far*)0xF000FA6EL; romptr = charset + (*text) * 8; unsigned char mask = 0x80; while(*text != NULL){
x += G*8; if(text[0] == 13){
} offset = (y<<8) +
(y<<6) + x; |
maintenant voyons voir pour notre feu, il nous faut une palette mais pas une pallette de 256 couleur car j'ai essayai et c trop long a gerer une grosse palette !
on va donc utiliser une pallette de 33 couleur ! pourquoi 33 ? parce que 666 c'est le chiffre du diable et que si on le divise par 2 ça donne 333 et si on enleve 300 ça donne 33 ! mon explication vous convient ? non ? tant pis !
bref il nous faut du jaune et du rouge donc voila le code :
void
palette_degrader(void){ int B=0,G=0,R=0; bool c1=false,c2=false; for (int i=33;i>0;i--){ outp(0x3C8, i); outp(0x3C9, R); outp(0x3C9, G); outp(0x3C9, B); if ((R<60)&&(!c1)) R=R+10; if ((G<60)&&(!c1)) G=G+5; if ((G>=60)&&(!c1)) c1=true; if ((G>0)&&(c1)&&(!c2)) G=G-10; if (G<0) G=0; if ((G==0)&&(c1)&&(!c2)) c2=true; if ((R>0)&&(c2)) R=R-3; if (R<0) R=0; if ((R==0)&&(c2)) c2=true; } } |
voila, le code est nul a chiez mes c'est pas grave :) !
vous pouvez inverser R et G et ainsi obtenir un superbe effet :
trop top puissant :)
Troisiéme etape : la gestion graphique :
et oui car on va pas utiliser ces saloperie de BGI la con !
on va utiliser le celebre mode 13h !
pour ouvrir ce mode il faut faire :
mov AH,0
mov AL,0x13
int 10h
et pour le fermer :
mov AH,0
mov AL,0x03
int 10h
mais vous voyez, c'est de l'asm ! et c'est pour ça que c'est bien :) !
pour placer un pixel sur l'ecran a l'emplacement x,y, on fait
:
vram[x+y*320]=couleur du point;
c pas super simple ça ? :)
Quatriéme etape : rapidité :
la memoire video n'est pas top super rapide en plus ecrire dessus point par point pendant que l'ecran est en train d'afficher le truc, c pas super ! :)
alors au lieu d'ecrire sur la memoire video, on va ecrire sur la ram ! c tout simple rappeler vous notre pointeur "vram" pointe sur la memoire video, ils suffit donc de lui dire de pointer autre part ! et aprés on copie tout dans la memoire video !
pour pointer autrepart on fait ça :
vram = (unsigned char far*)farmalloc(70000L);
pour copier la page à l'ecran :
unsigned char far* scrn = (unsigned char far *)0xA0000000L;
unsigned char far* virscrn = &vram[0];
asm{
push ds
les di, scrn
lds si, virscrn
mov cx, 35000
rep movsw
pop ds
}
pour liberer la ram et faire pointer "vram" sur la memoire video :
farfree(vram);
vram = (unsigned char far*)0xA0000000L;
Cinquiéme
etape : Conclusion
Souvent théorie et
pratique se rejoignent: rien ne marche et on n'y comprend rien.
ouep bah je crois que tout est dit ... j'ai surement oublié plein de truc, mais j'espere que tout le monde a compris, la source est livré avec dans : fire.zip
pour tout commentaire, croqmort@ifrance.com
je tient a remercier : Pri$m pour ses documents sur le mode 13h
CROQMORT