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 - Couleurs et mouvements
(Article écrit par Denis Bernard et extrait d'Amiga News - mai 1994)
|
|
Vous vous souvenez sans doute des lunettes à intensification de lumière
(Cf. cet article) ?
Nous allons ici réutiliser la commande Set BOB pour obtenir un autre effet encore
plus rigolo. J'en profiterai au passage pour vous montrer comment simuler un mouvement
avec accélération.
Si le mot bitplane vous laisse perplexe, ou encore si vous ne savez pas très bien
à quoi ça sert, je vous conseille vivement de relire l'article précité,
sinon vous ne saurez pas de quoi je parle dans la première partie.
Toutefois, le gros du programme étant consacré au mouvement d'objets, ce
n'est pas très grave si vous ne savez pas ce qu'est un bitplane : ne cherchez pas
non plus dans le dictionnaire, ils sont en train d'en enlever tous les mots à
tendance anglophone...
Couleurs
Afin d'utiliser au mieux la commande "Palette", vous avez appris comment on fabrique
les couleurs en vidéo : à l'aide des trois couleurs primaires, le rouge, le vert et le bleu,
d'où le sigle RVB (ou RGB pour la notation anglaise). Pour obtenir du jaune, on combine le
rouge et le vert, pour le cyan, c'est le vert et le bleu et enfin pour le magenta,
c'est le rouge et le bleu. Ça n'a pas l'air du tout logique (surtout pour ceux qui ont
fait un peu de peinture à l'école) mais ça marche.
Il serait donc intéressant de voir à l'écran comment ça se passe. Entrez donc ce
magnifique programme dans votre éditeur, et si vous ne voulez voir que l'effet du
mixage des couleurs, vous êtes dispensé de taper toute la partie comprise entre
l'instruction "Repeat" et "Until Mouse Key=2" (qui ne fait qu'animer trois spots)...
Ça y est ? Vous voyez donc qu'en plus de trois nouvelles couleurs, on obtient une
zone blanche au centre qui correspond à nos trois couleurs primaires combinées
ensemble. Essayez aussi la combinaison Cyan-Magenta-Jaune. L'astuce réside dans
l'organisation de la palette et une bonne utilisation de la commande Set BOB.
Nous avons trois BOB (en forme de disque) :
- BOB 1 : rouge, tracé uniquement dans le plan 0 (Set BOB 1,,1,)
- BOB 2 : vert tracé uniquement dans le plan 1 (Set BOB 2,,2,)
- BOB 3 : bleu tracé uniquement dans le plan 2 (Set BOB 3,,4,)
Il faut donc que les couleurs 1, 2 et 4 de notre palette soient respectivement rouge, verte et bleue.
Voyons maintenant les couleurs composées :
- Couleur 3 : correspond aux plans 0 et 1 (%11=3), combinaison du rouge et du vert,
donc jaune ($FF0)
- Couleur 5 : correspond aux plans 0 et 2 (%101=5), combinaison du rouge et du bleu,
donc magenta ($F0F)
- Couleur 6 : correspond aux plans 1 et 2 (%110=6), combinaison du vert et du bleu,
donc cyan ($0FF)
- Couleur 7 : correspond aux plans 0, 1 et 2 (%111=7), combinaison des trois,
donc blanc ($FFF)
Et voilà, il ne vous reste plus qu'à expérimenter d'autres combinaisons pour bien
maîtriser la chose et pour nous faire de beaux effets rigolos.
Que ceux qui n'ont pas entré la totalité du programme le fassent et voyons
maintenant comment gérer des mouvements complexes.
Mouvements
Le mouvement d'un objet est qualifié par son accélération (tableau A()),
sa vitesse (tableau V()) et sa position (tableau P()) dans deux dimensions
(X et Y) si on étudie son mouvement dans un plan (comme l'écran), ou trois
dimensions (X, Y et Z) si on étudie son mouvement dans l'espace, utilisé notamment
lorsqu'on fait de la 3D. Pas d'affolement, nous allons nous pencher uniquement sur
le mouvement d'un objet en deux dimensions.
Le principe est très simple au niveau de la programmation : il faut d'abord choisir
une unité de temps, toute trouvée avec le VBL, qui correspond au moment ou l'écran
vidéo est redessiné : sans plus entrer dans les détails, sachez que ça se produit
tous les 1/50e de seconde. Maintenant, à chaque nouvelle unité de temps, il
faut ajouter l'accélération à la vitesse et la vitesse à la position. Enfantin, non ?
Si vous ne saisissez pas le principe, prenez l'exemple d'une voiture :
plus vous accélérez, plus vous allez vite et plus vous êtes loin de votre point
de départ (je prie nos lecteurs les plus férus en physique d'être indulgents quant
à cet exemple un peu simpliste, mais je tente ici de faire ce que l'on appelle de la
vulgarisation...).
Le programme de ce mois-ci reproduit plus ou moins le mouvement de balles qui
rebondissent. Vous noterez que l'accélération horizontale est nulle et que
l'accélération verticale est toujours égale à 1. Effectivement, une fois qu'on
a jeté la balle, elle n'a plus d'accélération horizontale, mais elle est toujours soumise
à la pesanteur (qui correspond à une accélération agissant sur tout objet en chute libre).
Dans le programme, on lâche donc nos balles avec une vitesse horizontale quelconque et
placées au hasard dans l'écran. Ensuite, il n'y a plus qu'à laisser faire la nature
jusqu'à ce qu'elles touchent le sol. C'est là que les choses se compliquent :
il faut que la balle rebondisse, et pas question d'inverser l'accélération (même si
c'est en partie ce qui se passe en réalité), mais plutôt la vitesse verticale (c'est
beaucoup plus simple). D'autre part, pour le côté réaliste des choses, si on se contente
simplement de changer le signe de la vitesse verticale, notre balle rebondira indéfiniment,
ce qui n'est jamais le cas car il y a toujours perte d'énergie. Il faut donc en même
temps diminuer un peu cette vitesse (d'une unité par exemple). Enfin, en faisant la
même chose pour la vitesse horizontale lorsque la balle touche les bords gauche et
droit de l'écran, on obtient quelque chose d'à peu près réaliste.
Voilà, cogitez un peu sur ces quelques principes de base en matières de chromatique et
de mouvements pendant que je vous prépare pour le mois prochain une application de
tout ceci au déplacement d'une voiture. A'tchao !
|