Suivez-nous sur X
|
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z,
ALL
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
A propos d'Obligement
|
|
David Brunet
|
|
|
|
Programmation : AMOS - Manipulation des bitplanes
(Article écrit par Denis Bernard et extrait d'Amiga News - décembre 1993)
|
|
Ce mois-ci, nous allons aborder la programmation d'effets en manipulant directement les
bitplanes. Pas de panique, ce n'est pas très compliqué, et bien utilisé, on peut
obtenir des effets très rigolos.
Ceux qui utilisent l'économiseur d'écran SuperDark (programmé par Thomas Landspurg et
disponible sur disquettes Fish ou CAM) verront tout de suite de quoi je parle si je cite le module
"Spots", qui, comme son nom l'indique, déplace des spots sur l'écran du Workbench.
L'effet est obtenu par assombrissement de l'écran (qui devient presque noir), et seules deux
ou trois zones circulaires (et mobiles) apparaissent avec des couleurs normales. Dans certains
jeux, on utilise cet effet pour simuler l'éclairage du décor par les phares d'une voiture, ou
encore pour ne montrer que la zone visible par un personnage perdu dans un labyrinthe, etc.
L'application que je vous propose est "Comment simuler la vision d'un décor à travers des
lunettes à intensification de lumière en pleine obscurité". Allez, pour qu'il n'y ait plus
d'ambiguïté possible sur le sujet de cet article, tapez le programme dans votre éditeur et lancez-le.
Comment ça marche ?
Sur Amiga, les graphiques sont organisés en mémoire sous la forme de bitplanes.
En "superposant" ces bitplanes on obtient la couleur de chaque pixel. Prenons l'exemple
de la figure ci-dessous :
La couleur du pixel de coordonnées 0,0 est "%101" en binaire, soit "5" en décimal.
Celle des pixels suivants sont respectivement : %001 (1), %011 (3) et %110 (6).
Vous comprendrez aisément qu'avec trois bitplanes on obtient des valeurs entre 0 et 7
(%111) soit un total de huit couleurs. Un écran 16 couleurs est donc composé de quatre
bitplanes (valeurs de 0 à %1111 = 15).
Prenons maintenant une image huit couleurs qu'on place dans un écran 16 couleurs. Les huit
dernières couleurs (de 8 à 15), ne sont donc pas utilisées par l'image et on peut en
faire ce qu'on veut. Plus précisément, c'est le bitplane n°3 qui est libre, et c'est
avec celui-ci qu'on va jouer. Supposons maintenant que pour un pixel donné de notre
image, on mette la valeur du troisième bit (plane) à 1, et voyons ce qui se passe pour
quelques valeurs prises au hasard entre 0 et 7 :
Valeur initiale -> Nouvelle Valeur (après mise à un du troisième bit)
%0110 (6) -> %1110 (14)
%0101 (5) -> %1101 (13)
%0011 (3) -> %1011 (11)
%0000 (0) -> %1000 (8)
|
Tout pixel de couleur entre 0 et 7 prend une couleur, entre 8 et 15
(plus exactement : sa couleur initiale plus 8). Rappelez-vous que lorsque je
parle d'un numéro de couleur, registre de couleur, ou simplement couleur, je
parle bien du registre de couleurs, sans tenir compte de la valeur rouge/vert/bleu
de ce registre.
Et c'est là que ça devient intéressant : si on recopie la valeur RVB des huit
registres inférieurs dans les huit registres supérieurs (8->15) et qu'on initialise
les huit registres inférieurs à 0 (noir), on aura un écran noir, puisque notre image huit
couleurs utilise les huit registres inférieurs (couleurs 0->7). D'accord, j'avoue que la
formulation de cette dernière phrase n'est pas très claire, qu'il y a beaucoup de
répétitions, mais relisez-la attentivement, car c'est là que se trouve toute l'astuce !
Après cette manipulation sur les registres de couleurs et comme nous l'avons vu quelques lignes
plus haut, si on met à un le troisième bit de la couleur d'un pixel quelconque,
celle-ci sera augmentée de 8 et passera donc dans les huit
couleurs supérieures, le pixel deviendra donc visible !
Il nous faut maintenant trouver un moyen de dessiner uniquement dans le troisième bitplane...
Les BOB ! Grâce à la commande "Set Bob", on peut définir dans quel(s) bitplane(s) tracer
l'image d'un BOB. Il suffit de dire que le tracé se fera dans le bitplane n°3 et que l'image
de notre BOB utilise ce même bitplane (couleur n°8). Il ne reste plus qu'à mettre
tout cela en application.
Le programme
Après avoir ouvert un écran 16 couleurs, utilisé la couleur n°8 pour dessiner deux
cercles accolés qu'on saisit comme image de sprite (ou BOB) n°1, on charge une image
320x256 8 couleurs (ou moins). Si vous n'avez pas d'image de ce type, cliquez sur "Annuler"
ou "Cancel" dans la requête de fichiers et le programme en construira une pour vous.
La partie du dessin de l'image huit couleurs n'est pas commentée, elle dessine des barres
entrecroisées (le résultat n'est pas fameux...).
Pour donner l'effet "Lunettes à intensification de lumière", on ne recopie que les
composantes rouge et verte des huit couleurs inférieures dans les huit supérieures. On met un
coup de double tampon mémoire pour éviter que l'affichage scintille. Vous pouvez enlever cette
commande, mais l'affichage de BOB sans double tampon... Aïe Aïe Aïe. Sans commentaires !
Nous arrivons enfin à cette fameuse commande "Set Bob" :
- Paramètre 1 : numéro du BOB affecté.
- Paramètre 2 : mode de tracé de l'arrière-plan. Laissez-le à 0 sans aucun scrupule,
ce n'est pas l'objet de notre exercice.
- Paramètre 3 : chaque bit de ce paramètre correspond à un bitplane, la valeur par défaut
est %111111 (le BOB est dessiné dans tous les bitplanes), or seul le numéro 3 nous intéresse,
donc la valeur donnée est %1000. Les bits 0, 1 et 2 étant à 0, les bitplanes correspondants
ne seront pas affectés parle dessin de notre BOB.
- Paramètre 4 : ignorez-le !
On déclare ensuite notre BOB, attaché à un canal Amal qui va se charger de lui faire suivre
la souris. On lance Amal, et voilà, ça bouge tout seul !
Pour que la démonstration soit
vraiment réussie, je vous conseille de trouver une image huit couleurs 320x256 à donner
au programme. Notez que vous pouvez faire la même chose sur une image 16 couleurs, en la chargeant
dans un écran 32 couleurs. La manipulation se fera par tranche de 16 couleurs et il s'agira de
modifier le quatrième bitplane. Notez enfin qu'en modifiant la manipulation sur les registres de
couleurs, vous pouvez obtenir bien d'autres effets. Par exemple, pour reproduire l'effet de spots
dont je parlais au début de cet article, remplacer la boucle de copie des registres, ainsi que
les trois lignes suivantes, par :
For I=0 To 7
Colour I+8,Colour(I)
Colour I,Colour(1)/2 : On assombrit la couleur originale
Next I
|
Etc.
Atchao !
|