Fondu de couleursOn va reprendre notre source d'initiation qui règle la palette d'une image et on va essayer différentes méthodes pour afficher notre image en partant du noir. Première méthode avec des encres triées du plus sombre au plus clair : - On prend la première couleur et on la propage aux restantes - On prend la deuxième couleur et on la propage aux suivantes - ... Ainsi, les dernières couleurs (les plus lumineuses) seront passées d'abord par toutes les plus sombres, c'est la méthode que j'ai utiliséepour l'affichage de l'écran titre du jeu Léon Marchand.Pensez à récupérer le [fichier image] avant d'assembler ce source. BUILDSNA : BANKSET 0 ORG #100 RUN #100recommence ; toutes les encres au noir ld bc,#7F00 : ld e,#54 toBlack out (c),c : inc c out (c),e ld a,c : cp 17 : jr nz,toBlack ld bc,#7F80+%1100 : out (c),c ; utiliser le mode 0 call tempo ld e,1 ; notre limiteur fonduEnOuverture ; attendre la VBL ld b,#F5 .noVBL in a,(c) : rra : jr c,.noVBL .VBL in a,(c) : rra : jr nc,.VBL ld hl,palette_image ld bc,#7F00 xor a .setRealColor out (c),a : inc a : inc b : outi cp e : jr z,.propageSuivantes cp 17 : jr nz,.setRealColor jr .termine .propageSuivantes dec hl ; revenir à l'encre précédente out (c),a : inc a : inc b : outi cp 17 : jr nz,.propageSuivantes inc e : ld a,17 : cp e : jr z,.termine jr fonduEnOuverture .termine call tempo jr recommence tempo ld a,10 : ld bc,0 .loop djnz $ : dec c : jr nz,.loop : dec a : jr nz,.loop ret palette_image defb #54,#5C,#44,#56,#58,#40,#4C,#55,#52,#57,#45,#4E,#4A,#43,#5B,#4B border defb #4B ; couleur la plus claire répétée ORG #C000 ; mémoire vidéo incbin 'leonMarchand.bin'Le résultat est passable à vitesse réelle (50Hz) malgré le clignotement, mais si on regarde au ralenti, on voit que c'est vraiment du n'importe quoi...

Dans les liens du site, je mentionne le site de Super Sylvestre qui a écrit un bon article sur les fondus. Je vais prendre unede ses méthodes (le fondu RGB) et l'appliquer à notre image pour voir si le résultat est meilleur. Je le cite lorsqu'il parle d'un fondu en fermeture : "Je conseille de commencer à dégrader le vert, puis le rouge, et finir par le bleu, de façon à avoir quelques chose d'apparemment plus proportionnel." On va appliquer sa méthode à chaque couleur, c'est parti :) Vous savez que les couleurs du basic sont triées (relisez le tableau des couleurs) en base 3 avec le bleu en unité, le rouge puis le vert. Ce programme vaparcourir les couleurs dans l'ordre du basic, et descendre d'abord le vert (dans la limite de la quantité de vert disponible), et ainsi de suite pourles autres composantes. On se retrouve avec 7 valeurs par encre (parfois avec des répétitions). Charge à nous de retrouver nos encres ensuite. macro compose,lerouge,levert,lebleu defb soft2hard_ink({lebleu}+{lerouge}*3+{levert}*9) mendstartingindex 0 repeat 3,vert repeat 3,rouge repeat 3,bleu ; on va parcourir toutes les encres tmprouge=rouge : tmpvert=vert : tmpbleu=bleu compose tmprouge,tmpvert,tmpbleu ; encre de base ; on essaie 2 fois de descendre le vert repeat 2 if tmpvert>0 : tmpvert-=1 : endif compose tmprouge,tmpvert,tmpbleu rend ; on essaie 2 fois de descendre le bleu repeat 2 if tmpbleu>0 : tmpbleu-=1 : endif compose tmprouge,tmpvert,tmpbleu rend ; on essaie 2 fois de descendre le rouge repeat 2 if tmprouge>0 : tmprouge-=1 : endif compose tmprouge,tmpvert,tmpbleu rend rend rend rendJe vais vous faciliter le travail, les 189 octets produits par le source précédent organisés en texte avec de jolis DEFB. ; table de couleurs pour fondu en fermeture (ordre basic) defb #54 , #54 , #54 , #54 , #54 , #54 , #54 defb #44 , #44 , #44 , #54 , #54 , #54 , #54 defb #55 , #55 , #55 , #44 , #54 , #54 , #54 defb #5C , #5C , #5C , #5C , #5C , #54 , #54 defb #58 , #58 , #58 , #5C , #5C , #54 , #54 defb #5D , #5D , #5D , #58 , #5C , #54 , #54 defb #4C , #4C , #4C , #4C , #4C , #5C , #54 defb #45 , #45 , #45 , #4C , #4C , #5C , #54 defb #4D , #4D , #4D , #45 , #4C , #5C , #54 defb #56 , #54 , #54 , #54 , #54 , #54 , #54 defb #46 , #44 , #44 , #54 , #54 , #54 , #54 defb #57 , #55 , #55 , #44 , #54 , #54 , #54 defb #5E , #5C , #5C , #5C , #5C , #54 , #54 defb #40 , #58 , #58 , #5C , #5C , #54 , #54 defb #5F , #5D , #5D , #58 , #5C , #54 , #54 defb #4E , #4C , #4C , #4C , #4C , #5C , #54 defb #47 , #45 , #45 , #4C , #4C , #5C , #54 defb #4F , #4D , #4D , #45 , #4C , #5C , #54 defb #52 , #56 , #54 , #54 , #54 , #54 , #54 defb #42 , #46 , #44 , #54 , #54 , #54 , #54 defb #53 , #57 , #55 , #44 , #54 , #54 , #54 defb #5A , #5E , #5C , #5C , #5C , #54 , #54 defb #59 , #40 , #58 , #5C , #5C , #54 , #54 defb #5B , #5F , #5D , #58 , #5C , #54 , #54 defb #4A , #4E , #4C , #4C , #4C , #5C , #54 defb #43 , #47 , #45 , #4C , #4C , #5C , #54 defb #4B , #4F , #4D , #45 , #4C , #5C , #54Revenons à nos moutons, nous avons une image, nous avons une palette, il nous faut extraire l'information utile de cette table et l'appliquer à notre palette. palettes_finales defb #54,#54,#54,#54,#54,#54,#54,#54,#54,#54,#54,#54,#54,#54,#54,#54 defb #54,#54,#54,#54,#54,#54,#5C,#54,#54,#54,#5C,#5C,#5C,#5C,#54,#5C defb #54,#5C,#54,#54,#5C,#5C,#4C,#54,#54,#54,#4C,#4C,#4C,#4C,#5C,#4C defb #54,#5C,#54,#54,#5C,#5C,#4C,#44,#54,#44,#4C,#4C,#4C,#4C,#58,#45 defb #54,#5C,#44,#54,#58,#58,#4C,#55,#54,#55,#45,#4C,#4C,#45,#5D,#4D defb #54,#5C,#44,#54,#58,#58,#4C,#55,#56,#55,#45,#4C,#4E,#47,#5F,#4F defb #54,#5C,#44,#56,#58,#40,#4C,#55,#52,#57,#45,#4E,#4A,#43,#5B,#4Bpalette_image defb #54,#5C,#44,#56,#58,#40,#4C,#55,#52,#57,#45,#4E,#4A,#43,#5B,#4B ; referenceOn a 7 palettes correspondant à notre fondu. Nous allons simplement les parcourir (lentement). Comme on le voit, ici le plus difficile est la préparation des données,de sorte qu'on ait une succession cohérente de couleurs. Le code se contentera de bêtement lire une table, puis une autre... BUILDSNA : BANKSET 0 ORG #100 RUN #100ld bc,#7F80+%1100 : out (c),c ; utiliser le mode 0 recommence ld hl,palettes_finales ld d,7 ; 7 palettes à faire .bouclePalette ld bc,#7F00 .boucleCouleur out (c),c : inc c : inc b : outi : ld a,c : cp 17 : jr nz,.boucleCouleur ld e,3 ld b,#F5 .noVBL in a,(c) : rra : jr c,.noVBL .VBL in a,(c) : rra : jr nc,.VBL dec e : jr nz,.noVBL dec d : jr nz,.bouclePalette call tempo jr recommence tempo ld a,10 : ld bc,0 .loop djnz $ : dec c : jr nz,.loop : dec a : jr nz,.loop ret palettes_finales defb #54,#54,#54,#54,#54,#54,#54,#54,#54,#54,#54,#54,#54,#54,#54,#54,#54 defb #54,#54,#54,#54,#54,#54,#5C,#54,#54,#54,#5C,#5C,#5C,#5C,#54,#5C,#5C defb #54,#5C,#54,#54,#5C,#5C,#4C,#54,#54,#54,#4C,#4C,#4C,#4C,#5C,#4C,#4C defb #54,#5C,#54,#54,#5C,#5C,#4C,#44,#54,#44,#4C,#4C,#4C,#4C,#58,#45,#45 defb #54,#5C,#44,#54,#58,#58,#4C,#55,#54,#55,#45,#4C,#4C,#45,#5D,#4D,#4D defb #54,#5C,#44,#54,#58,#58,#4C,#55,#56,#55,#45,#4C,#4E,#47,#5F,#4F,#4F defb #54,#5C,#44,#56,#58,#40,#4C,#55,#52,#57,#45,#4E,#4A,#43,#5B,#4B,#4B ORG #C000 ; mémoire vidéo incbin 'leonMarchand.bin'Je vous laisse juger du résultat sur la preview, mais surtout sur un CPC ;)

Roudoudou CPCrulez[Content Management System] v8.732-desktop/c Page créée en 525 millisecondes et consultée 29 foisL'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko. |
|