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 : Assembleur - Tube-Intro (défilement multiparamétrable et multidirectionnel)
(Article écrit par Little Zeus et extrait d'Amiga News Tech - juin 1989)
|
|
Et nous revoici ensemble pour entamer le plat de résistance : le défilement multiparamétrable et multidirectionnel.
Celui-ci vous est offert par le meilleur restaurant de la galaxie informatique : Commodore Revue.
Le mois dernier, vous avez certainement été très fiers de voir aboutir fructueusement le travail de plusieurs
mois et d'obtenir à l'écran votre logo, enfin complètement animé. Nous achèverons le défilement
seulement dans deux numéros, ceci à cause de sa longueur et de sa légère complexité. Cela ne veut pas
pour autant dire que nous allons voyager à travers le Copper, le Blitter et les champs de jeu ("playfields")... d'ailleurs,
nous nous servons dès aujourd'hui du défilement pour illustrer un processus méconnu mais qui, dès
qu'il est révélé au grand jour (ce qui est fait un peu plus bas) apparaît tellement utile qu'il
en devient indispensable.
Cessons de vous mettre l'eau à la bouche. Nous nous intéressons cette fois-ci à la possibilité de changer
le mode de champ de jeu à n'importe quel emplacement de l'écran ; effectivement, après avoir utilisé un
simple champ de jeu de trois plans de bits pour l'animation de notre logo, dont je ne doute pas que vous avez
admiré avec plaisir la danse céleste, nous utilisons un double champ de jeu et quatre plans de bits pour le
défilement. Tout ceci nous est possible grâce à un coprocesseur, unique apanage des Amiga, le Copper.
Le procédé est très simple pour ne pas dire évident : au moyen du Copper nous attendons une ligne ;
au moment où celle-ci est atteinte, il suffit de modifier le registre relatif aux champs de jeu et à partir de
cette ligne l'écran passe en mode double champ de jeu !
Avant d'expliquer la nécessité de ce mode au sein du programme, attardons-nous sur son fonctionnement.
Il s'agit d'avoir deux écrans pour le prix d'un ! Explication un peu laconique, n'est-ce pas ? Imaginez
que vous ayez deux images (fig. 1) ; dans chacune d'entre elles, la première couleur correspond au
transparent, c'est-à-dire que lors de leur superposition, l'image avant laissera apercevoir l'image
arrière à travers la première couleur de sa palette.
Figure 1
La figure 2 illustre ceci : un paysage a été dessiné sur une image et un mur de maison avec, en son milieu,
une fenêtre sur une autre.
Figure 2
A présent, nous désirons voir le paysage à travers la fenêtre : il suffit de superposer les deux images en
ayant pris préalablement le soin de remplir la fenêtre de la couleur transparente (fig. 3).
Figure 3
Mais attention ! Pourquoi ne serait-ce pas le paysage qui serait placé à l'avant du mur ? Parce qu'il existe un
registre qui donne, suivant sa valeur, la priorité du mur sur le paysage ou inversement. Mais alors pourquoi
utiliser le mode double champ de jeu si on peut avoir exactement le même effet à l'écran, en ayant seulement dessiné
une seule image ? Eh bien parce que le mode double champ de jeu devient intéressant si nous remplaçons notre fenêtre
de maison par un hublot d'avion et si nous faisons défiler le paysage ; nous avons alors, en faisant défiler
l'image de derrière de droite à gauche, ou même de bas en haut, le sentiment d'être dans un avion en mouvement.
N'est-ce pas merveilleux ?
Cependant, le mode double champ de jeu a un défaut : il permet au maximum huit couleurs par champ de jeu, car
l'Amiga offre uniquement six plans de bits. En utilisant tous les plans de bits pairs pour un champ de jeu
et les plans de bits impairs pour l'autre, ce qui fait trois plans de bits par champ de jeu, le chiffre maximal est
%111=8. Dans notre intro, nous n'aurons besoin que de deux plans de bits par champ de jeu, la Charset utilisant
seulement quatre couleurs. Nous aurons néanmoins beaucoup plus de quatre couleurs pour le défilement
car nous utiliserons le Copper pour en rajouter et surtout pour renforcer l'effet de courbure du tube.
Après la théorie, la pratique. D'abord une présentation des différents mouvements possibles du scrolltext (texte défilant) :
celui-ci peut monter et descendre ; il peut rouler vers le haut et vers le bas (défilement
de rotation vertical) ; et bien sûr, il est animé d'un mouvement horizontal, de la droite vers la gauche.
Les combinaisons de ces différents mouvements engendrent des effets que vous découvrirez, ébahis, dans
deux numéros.
Descendons maintenant dans les coulisses de l'écran pour comprendre par quel moyen miraculeux nous animons
le texte défilant de la sorte. Les mouvements verticaux de rotation sont exécutés à l'aide de Scrollraster,
routine de la graphics.library qui permet les défilements dans le sens désiré, à l'intérieur d'un parallélogramme.
Il en est de même pour le défilement horizontal.
Quant au défilement vertical, nous usons d'un subterfuge ; nous aimons cela. Nous allons avoir recours à
une méthode que nous avions déjà quelque peu vue le mois dernier : le repointage des plans de bits. De la
même manière que dans le numéro précédent nous repointions les plans de bits pour créer l'effet de déformation,
nous allons ici les repointer pour donner une impression de défilement vertical (à ne pas confondre avec le
défilement vertical de rotation).
Ne paniquez pas si ceci vous apparaît quelque peu confus, nous allons nous appuyer sur un exemple : lorsque
vous avez la fenêtre du Workbench à l'écran et qu'au moyen de la souris vous faites descendre le cadre, vous
avez un défilement vertical, mais celui-ci est uniquement illusoire. Imaginons que nous fassions descendre le
cadre de "x" pixels, alors le système d'exploitation se charge de "poker" la valeur de base des plans de bits dans
les registres correspondants, au moment ou le Raster atteint cette ligne "x". Mais comme dans notre
programme, nous devons repointer les plans de bits (à cause des effets couleurs sur le tube) après avoir dépassé
la position réelle du défilement ; nous devrions avoir deux défilements simultanément à l'écran ;
nous éliminons donc cet effet indésirable en mettant à 0 les couleurs, lorsque le Raster balaye la partie
de l'écran correspondant à l'emplacement réel du défilement.
Vous remarquerez que j'utilise le mode "un plan de bits", et ce, afin d'avoir uniquement une seule couleur à
mettre à 0. Il s'agit maintenant de faire tourner notre tube : notre cylindre est divisé longitudinalement
de manière à ce que la partie avant du cylindre appartienne au champ de jeu avant et la partie arrière, au
champ de jeu arrière (ce n'est pas très original). Nous animons donc les demi-cylindres avant et arrière du
défilement, de deux mouvements opposés à l'aide de Scrollraster.
Cependant, cela ne suffit pas pour avoir notre défilement en rotation autour du tube, car il manque la
copie des lignes extrêmes d'un champ de jeu à l'autre. Soyons un peu plus explicites : si vous désirez voir
réapparaître à l'arrière la ligne supérieure (en admettant que le cylindre tourne vers le haut)
de votre message de la partie avant du cylindre, il faut le recopier ligne par ligne. Pour ne pas avoir
de parasites à la ligne où nous copions d'un champ de jeu à l'autre, nous mettons les couleurs à 0.
Mais attention, selon le sens de rotation du tube, les copies se feront du champ de jeu avant vers l'arrière,
ou inversement. Par exemple, si le tube prend un sens de rotation vers le haut, la partie avant du haut
du tube subira une copie du champ de jeu avant, vers le champ de jeu arrière. Le bas du tube subira le sort
contraire (fig. 4).
Figure 4
En ce qui concerne l'effet des couleurs sur le tube, nous l'expliquerons clairement le mois prochain.
Si dans la routine, vous vous êtes étonné de voir que le champ de jeu avant est décalé de 16 pixels
vers la droite, sachez que cela concerne la forme du tube et nous en verrons l'explication la fois
prochaine.
N'essayez pas d'assembler la routine puisqu'elle est encore incomplète et donc inexécutable. Ne soyez
pas pris de court le jour où nous publierons la dernière partie de la routine du défilement.
Préparez une police de caractères de 40 pixels de largeur sur 32 de hauteur ?
Dernière chose, cette fois-ci, nous avons vu le principe de fonctionnement du défilement un peu grossièrement ;
dans le prochain numéro, nous reviendrons sur des parties de routines publiées ici, en les éclairant.
Sur ce, je vous quitte et vous donne rendez-vous dans le prochain numéro pour la suite de la Tube-Intro.
Je vous rappelle que toutes vos suggestions, critiques ou questions sont les bienvenues.
|