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 - Wave (rasters Copper horizontaux et en mouvement suivant une courbe sinusoïdale)
(Article écrit par Jérôme Étienne et extrait d'Amiga News Tech - juin 1991)
|
|
Et voilà : un disque dur en panne vous prive du plaisir de manipuler des objets 3D en faces pleines.
Nous souhaitons évidemment un prompt rétablissement à ce pauvre Amiga, et pour vous faire patienter,
nous vous proposons une routine que Jérôme Etienne nous avait envoyée pour l'évaluation de ses qualités.
Vous aurez donc le plaisir, la joie et l'avantage de découvrir dans les lignes qui suivent, un programme
de Jérôme Étienne et un article de votre serviteur. Rassurez-vous, le programme est suffisamment long et
commenté pour m'éviter de dire trop de bêtises... De quoi s'agit-il donc ? D'un effet de Copper que
tous les démomakers ont utilisé un jour ou l'autre : des rasters horizontaux et en mouvement suivant une
courbe sinusoïdale.
Principe du programme
Le principe de cet effet est assez simple à réaliser. Il consiste à recalculer la liste Copper
à chaque VBL, en prenant soin d'y inscrire chaque ligne de raster dans le bon ordre afin de conserver à la
chose son côté esthétique.
On gère 15 barres composées de 16 lignes de rasters (Cf. constante nb_coul). Au départ, on construit
dans "tab_y_wave" une table des différentes coordonnées possibles pour chaque barre, suivant la fonction
y=sin(x)*raywave+oy_wave avec "x" variant de 0 à 359 degrés. L'avantage d'une telle table
est qu'on pourra aller y piocher les coordonnées des barres plutôt que d'avoir à recalculer un sinus
à chaque itération de la boucle principale.
Une seconde table, au label "cur_coor_wave", contient la coordonnée actuelle de chacune des "nb_bar"
barres. La première barre dans la table est celle qui semble la plus "éloignée" à l'écran. Ainsi,
lorsque l'on affichera toutes les barres l'une après l'autre, elles viendront peu à peu se superposer
pour donner cette impression de profondeur.
La boucle principale n'a plus qu'à attendre la VBL, à effacer entièrement la liste Copper
de manière à ce que les barres ne laissent pas de "traces" à l'écran puis à modifier la coordonnée de
chaque barre en lui ajoutant la vitesse de déplacement actuelle (paramétrable avec les flèches gauche
et droite du clavier) et à piquer la nouvelle coordonnée ainsi obtenue dans la table construite
plus tôt. La barre est ensuite redessinée sur toute sa hauteur dans la liste Copper.
On boucle ainsi jusqu'à ce que toutes les barres aient été traitées.
Voilà. Un dernier mot sur la routine de sinus/cosinus : ne vous étonnez pas de voir qu'il est
nécessaire d'appeler, dans la partie initialisation du programme, une routine qui la prépare.
Pour éviter d'avoir à se taper les 360 valeurs de sinus possible, on n'en a initialisé que 90
(ce qui est quand même déjà pas mal !) à partir desquelles on va déduire les 270 restantes. C'est tout.
|