Obligement - L'Amiga au maximum

Dimanche 24 septembre 2017 - 12:38  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Hit Parade
 · Liens
 · Liste jeux Amiga
 · Quizz
 · Téléchargements
 · Trucs et astuces


Articles

 · Actualité (récente)
 · Actualité (archive)
 · Comparatifs
 · Dossiers
 · Entrevues
 · Matériel (tests)
 · Matériel (bidouilles)
 · Points de vue
 · En pratique
 · Programmation
 · Reportages
 · Tests de jeux
 · Tests de logiciels
 · Tests de compilations
 · Articles divers

 · Articles in english
 · Articles in other languages


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Moteurs de recherche
 · Pages de liens
 · Constructeurs matériels
 · Matériel
 · Autres sites de matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Développeurs logiciels
 · Logiciels
 · Développeurs de jeux
 · Jeux
 · Autres sites de jeux
 · Scène démo
 · Divers
 · Informatique générale


Jeux Amiga

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


Trucs et astuces

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


Glossaire

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


Partenaires

Annuaire Amiga

Amedia Computer

Relec

Hit Parade


Contact

David Brunet

Courriel

 


Programmation : AMOS - tourneur d'images
(Article écrit par Denis Bernard et extrait d'Amiga News - juin 1994)


Tourneur d'images

Quelle idée j'ai eue le mois dernier de vous parler de reproduire le mouvement d'une voiture ! En effet, en vue de dessus, pour obtenir quelque chose qui tienne la route, il faut avoir le dessin de ladite voiture dans 32 positions en rotation... Qui va s'amuser à faire tous ces dessins, juste pour voir comment faire bouger une voiture ?

Pour les nostalgiques du début de la micro, les vétérans des pages entières de données, j'aurais effectivement pu remplir une pleine page de données pour le dessin de la voiture, mais il faut penser aux autres ! Et puis après tout, n'est-ce pas le rôle de l'ordinateur de faire le boulot à notre place ? Laissez-le faire et il vous tracera bien gentiment votre dessin dans toutes les positions.

Allez, prenez donc votre plus bel éditeur de sprites et contentez-vous de dessiner votre bolide vu de dessus, le capot vers le haut. Ne vous compliquez pas la vie : un vague rectangle pour la carrosserie, flanqué de quatre petits rectangles gris (ou noirs) pour les roues feront largement l'affaire. Vous pouvez même pousser le réalisme en y ajoutant deux phares jaunes à l'avant et deux pixels rouges à l'arrière. Surtout, ne faites pas un dessin qui fasse plus de 32x32, il n'y aurait plus de place pour le décor.

Une fois votre oeuvre achevée, placez-la en image n°1 de la banque de sprites puis sauvez la banque. Il vous suffira ensuite de taper le programme, de le lancer en appuyant sur la touche F1, et enfin de lui indiquer sous quel nom vous avez sauvé votre banque de sprites, dont l'image n°1 est votre charrette dans sa position initiale.

Après un dur labeur, il vous demandera sous quel nom vous voulez sauver votre nouvelle banque de 32 images (soit 32 positions en rotation)... ne saurai trop conseiller de compiler le programme, car si vous l'utilisez en mode interprété, vous risquez de trouver le temps long (une minute pour une image de 32x32 en 16 couleurs).

Passons maintenant aux informations techniques

Les matheux pourront facilement recalculer les formules de rotation à l'aide des nombres complexes. Sachez simplement qu'au lieu de calculer une rotation d'angle A, on calcule une rotation d'angle -A, ceci étant dû à l'inversion de l'axe (yy') par rapport au modèle standard.

Si vous souhaitez réutiliser ces formules, il vous faudra choisir un point qui sera le centre de la rotation et un angle. Supposons que vous ayez choisi CX et CY comme coordonnées de ce point, et A pour angle rotation (sens inverse des aiguilles d'une montre), les formules à utiliser seront les suivantes ;
  • NX = ((X-CX) * Cos(A) - (Y-CY) * Sin(A)) + CX
  • NY = ((X-CX) * Sin(A) + (Y-CY) * Cos(A)) + CY
(NX et NY sont bien entendu les coordonnées du nouveau point)

Par souci de rapidité, je n'ai pas utilisé de nombres en virgule flottante et j'ai utilisé deux tableaux "_SIN()" et "_COS()" pour y stocker les sinus et cosinus des angles de 0 à 359 degrés, le tout multiplié par 256. Le fait de multiplier par 256 permet justement de se passer des nombres en virgule flottante et au lieu d'obtenir des valeurs dans l'intervalle ]-1;1[, on obtient des valeurs dans l'intervalle ]-256;256[.

Il suffit par la suite de diviser par 256 le résultat d'une multiplication ou division par "_SIN()" ou "_COS()" pour retomber sur nos pieds, avec une précision de calcul de l'ordre de 1/256. Mais, me direz-vous, cette multiplication par 256 suivie d'une division par 256 doit rendre les calculs plus lents qu'en utilisant les nombres en virgule flottante ! Eh bien non, cette multiplication par 256 est faite uniquement pendant la création des tables "_SIN()" et "_COS()", et la division est faite sur des nombres entiers. De plus, si vous compilez le programme avec AMOS Pro Compiler, la division par 256 sera directement remplacée par un décalage à droite de 8 bits (extrêmement rapide !). Exemple : 1024/256 = 4.

Regardons maintenant la même opération par décalage de bits : 1024 (décimal) = %10000000000 (binaire). En décalant les bits de 8 (2^8 = 256) positions à droite on obtient : %100 (binaire) = 4 (décimal).

Et voilà, le tour est joué ! Si vous êtes perspicace, vous aurez remarqué que cette astuce ne fonctionne que si on utilise une puissance de deux (2, 4, 8, 16, 32).

Le calcul de l'image tournée se fait en trois passages. Si on se contente de calculer la rotation pour chaque point, on se retrouve avec des trous dans l'image, c'est-à-dire que certains points ne sont jamais affectés, et c'est très embêtant. Ceci est dû aux approximations. Par exemple, un point image dont les coordonnées théoriques sont (1,27;2,84) se retrouve en fait affiché aux coordonnées (1,2) alors qu'il faudrait qu'il soit affiché aux coordonnées (1:3). On fait donc un premier passage en coloriant simplement tous les points, et un second qui recherche tous les points laissés vides, calcule leur point d'origine théorique et leur affecte la bonne couleur.

Le dernier passage refait le calcul et affiche définitive. Ce n'est pas encore parfait et on se retrouve avec des points parasites qu'il suffit de supprimer avec l'éditeur de sprites. J'ai essayé diverses autres méthodes pour remplir ces fameux points laissés en blanc, et c'est celle-ci qui a donné les meilleurs résultats et qui demande le moins de retouches des images par la suite.

Allez, pendant que vous faites tout tourner (le programme et les images), je vous prépare le programme qui va enfin la faire vrombir cette fichue voiture, atchao !

AMOS
AMOS
AMOS
AMOS


[Retour en haut] / [Retour aux articles] [Article précédent]