CODINGLISTINGS ★ BASIC - VOLUMES ★

Basic - Volumes|Science et Vie Micro)Coding Listings

Les lecteurs de SVM semblent passionnés par la représentation d'objets en trois dimensions. Vous avez été nombreux à manifester votre satisfaction, après la publication du programme Tri-Di Animator, de Guillaume Dargaud (SVM n ° 27). Notre gagnant du mois, Hervé Masson, va plus loin, en introduisant les notions de faces cachées et d'éclairage de l'objet. Son programme Volumes, destiné à l'Amstrad CPC 464, permet en outre une saisie directe de l'objet à traiter sans recours à de fastidieuses listes de données numériques.

LA REPRÉSENTATION - FIL DE FER - d'un objet dans l'espace a un avanftage : la relative simplicité et donc rapidité des calculs, mais éqalement un défaut fondamental : le manque de réalisme certain du résultat obtenu. Tout simplement parce qu'un objet n'est pas toujours transparent, et que le relief lui est donné par la lumière qu'il reçoit. L'intérêt du programme Volumes est donc double. D'une part en ne donnant à voir de l'objet que les faces effectivement visibles, d'autre part en le décomposant en facettes de différentes valeurs de trame, rendant ainsi compte de l'éclairage auquel il est soumis.


Pour ceci, le dessin n'est pas vectorisé sous forme de noeuds et de droites, comme dans Tri-Di Animator, mais sous forme de facettes planes à quatre côtés. Ce procédé est gourmand en mémoire, mais relativement simple à mettre en oeuvre. Chaque facette est ainsi mémorisée sous la forme de quatre variables indicées : par exemple, la facette n, délimitée par les points i,j, k et /, est mémorisée sous la forme P (n,0) = i,P (n,1) =j, P (n,2) = k,P (n,3) = l. De même, chaque point / est déterminé par ses coordonnées cartésiennes X(i), Y(i), Z(i). A ce stade, il est désormais simple d'effectuer sur l'objet les transformations dans l'espace habituelles. Le programme Volumes propose seulement les rotations autour des trois axes, l'oeil de l'observateur restant fixe, mais rien n'interdit le rajout d'autres transformations, comme dans Tri-Di Animator.

Pour l'affichage du dessin ainsi traité, de nouvelles notions doivent intervenir. Et tout d'abord la suppression des faces cachées. Il n'y a pas, dans le programme, d'algorithme spécifique à proprement parler mais une astuce beaucoup plus simple à exploiter : le volume étant constitué de facettes remplies, il suffit de les afficher successivement, en commençant par les plus éloignées. Par superposition, les plus proches recouvrent donc, les plus lointaines, et cachent ainsi les faces indésirables de l'objet. Pratiquement, il faut donc trier les facettes selon un nouveau paramètre, la distance facette-observateur (il s'agit de la variable d(n) dans le programme). Reste maintenant à rendre compte de l'éclairage auquel est soumis l'objet. Là encore, le calcul s'effectue facette par facette, et le résultat obtenu, c'est-à-dire une teinte plus ou moins sombre pour la facette considérée, dépend de l'angle formé par le vecteur qui va de la source de lumière au centre de la facette, avec le vecteur perpendiculaire au plan de la facette. Plus cet angle est important (proche de 90°), moins la facette considérée recevra de lumière. Il suffit donc de créer une échelle de teintes plus ou moins denses (ou plutôt de trames de gris dans le cas présent), qui à chaque valeur d'angle pourra attribuer une valeur de trame.
 

Photo 2: L'objet prend forme losqu'on reproduit plusieurs fois son arête.

Photo 3: La forme définitive de l'objet s'affiche facette par facette.

Création des trames

L'Amstrad CPC n'étant doté d'aucune fonction de création de trame, ni dans le cas du 464 d'une fonction de remplissage de zone, Volumes intègre un sous-programme en langage machine qui palliera ce manque. Il s'agit d'une routine qui détourne le système d'exploitation de la machine lors du tracé d'une droite, et n'affiche que certains points en fonction de la trame choisie. La sélection d'une trame T se fait par CALL &A940 , T. La première partie de la routine, implantée en &A900, est chargée précisément de la modification de la fonction DRAW au sein du système. La seconde, implantée en &A940, exploite les trames définies dans des matrices 8 x 8 bits par la troisième partie, implantée en &AA00. Tout se passe dès lors comme si la fonction DRAW, au lieu d'allumer tous les points qui séparent un point d'un autre, n'allumait que certains points, à intervalles plus ou moins rapprochés, selon la densité de trame choisie.

Mode d'emploi

Par souci de simplicité et également d'efficacité, le programme ne prend en compte qu'un seul type de volumes : les objets de révolution, c'est-à-dire symétriques par rapport à un axe. Exemples : un écrou, un verre, une pièce de jeu d'échecs, etc. Rien n'empêche évidemment l'adaptation à d'autres types de volumes, le noyau du programme ne s'y opposant pas. Mais l'exploration des formes d'objets de révolution est particulièrement bien adaptée à ce genre de programme, les résultats obtenus étant toujours spectaculaires, avec un minimum d'effort.

Ainsi, après démarrage du programme par RUN, un écran de saisie de la ligne de définition s'affiche (photo 1). Cette ligne représente l'arête de l'objet, qui, reproduite X fois en rotation autour de l'axe central, dessinera le volume. Pour tracer cette ligne, il suffit de se déplacer sur l'écran au moyen des touches de curseur (l'appui simultané sur SHIFT accélère le déplacement), et de valider Chaque extrémité de droite avec la barre d'espace. La ligne terminée, il suffit d'appuyer sur RETURN. Vous pouvez dès lors choisir les trois angles de rotation de l'objet dans l'espace, c'est-à-dire les mouvements de l'objet sur lui-même, qui permettront de l'observer sous n'importe quelle face. Par défaut, des valeurs arbitraires sont attribuées aux trois angles. Le programme demande ensuite l'angle de la rotation que doit effectuer la ligne de définition (360 ° pour un tour complet, 270 ° pour 3/4 de tour, etc., toute valeur intermédiaire entre 0 et 360 étant possible), et enfin le nombre de méridiens, c'est-à-dire le nombre de fois que la ligne de définition sera reproduite dans l'angle de rotation considéré. Après un temps de calcul plus ou moins long selon la complexité de l'objet traité, il reste à fournir l'échelle (par exemple 1 pour un dessin tel, 0,5 pour un dessin réduit de moitié), l'intensité de la lumière ambiante (de 0 à 16), l'intensité de la source ponctuelle (de 2 à 16), et les coordonnées de la source dans le repère cartésien. Le volume s'affiche dès lors facette par facette (photos 2 et 3).

Vous avez ensuite le choix entre définir un nouveau tracé à partir des mêmes données mais en modifiant échelle, intensité et coordonnées de la lumière, sauvegarder le dessin réalisé, ou quitter le programme.

Le programme en détails

  • Les lignes 40 et 50 définissent les couleurs de papier et d'encre, établissent le mode de calcul en degrés (radians à l'initialisation), placent le haut de mémoire occupé par le Basic en &A8FF, et chargent le sous-programme de création de trame.
  • Lignes 60 à 100 : déclaration des variables et tableaux. Le programme peut traiter jusqu'à mille points et mille facettes.
  • Lignes 110 à 200 : affichage de l'écran de saisie du dessin.
  • Lignes 210 à 650 : gestion du clavier et validation des points saisis.
  • Lignes 660 à 890 : choix de l'angle de révolution, du nombre de méridiens, des angles de rotation, et découpage du volume en facettes planes à quatre côtés.
  • Lignes 900 à 1050 : recalcul des coordonnées de chaque point en fonction des angles de rotation du volume dans l'espace.
  • Lignes 1060 à 1110 : tri des facettes selon leur distance par rapport à l'oeil de l'observateur.
  • Lignes 1120 à 1280 : choix de l'échelle, de l'intensité de la lumière, et de la position de la source lumineuse.
  • Lignes 1290 à 1350 : mise à l'échelle.
  • Lignes 1360 à 1720 : affichage du dessin facette par facette, avec remplissage de trame.
  • Lignes 1730 à 2090 : chargeur Basic du sous-programme de création de trame en langage machine.

Nous vous fournissons à la suite du programme proprement dit, un petit programme de réaffichage des dessins stockés, à exploiter indépendamment. La petite routine en langage machine incorporée est simplement destinée à afficher d'un seul coup le dessin. Toutes les données d'écran sont d'abord chargées à partir de l'adresse &4000, puis copiées d'un bloc à partir de l'adresse &C000, début de la mémoire-écran. Le programme boucle de manière à afficher successivement tous les dessins stockés.

Tel qu'il est écrit ici, le programme ne tournera que sur Amstrad CPC. A cause de la routine en langage machine bien sûr, et à cause de nombreuses spécificités du Basic Amstrad. Les algorithmes de calcul, en revanche, resteront valables pour n'importe quelle machine. C'est donc dans le domaine de l'affichage que les transformations seront les plus importantes.

SVM , http://cpcrulez.fr

★ EDITEUR: SVM
★ ANNÉE: 1986
★ AUTEUR: Hervé MASSON

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listings:
» svm31-volumes-listing-reaffichageDATE: 2011-07-05
DL: 121 fois
TYPE: image
SIZE: 153Ko
NOTE: w956*h387

» svm31-volumes-listing-revolutionDATE: 2011-07-05
DL: 173 fois
TYPE: image
SIZE: 2909Ko
NOTE: w931*h7275
 
» Volumes    (Science  et  Vie  Micro)    FRENCHDATE: 2018-07-30
DL: 18 fois
TYPE: ZIP
SIZE: 25Ko
NOTE: Uploaded by CPCLOV ; 40 Cyls
.HFE: OUI

Dump cassette:
» Volumes    (Science  et  Vie  Micro)    FRENCHDATE: 2018-09-17
DL: 41 fois
TYPE: ZIP
SIZE: 6Ko
NOTE: Uploaded by CPCLOV ;
.HFE: NON

Je participe au site:
» Newfile(s) upload/Envoye de fichier(s)
★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Coding » Sdcc - 17 - 3D - Trace Points
» Coding » Cours d'assembleur par Demoniak - Partie 8: La 3D en faces pleines sur CPC
» Coding Src's » 3D Shape Rotator
» Coding » Sdcc - 20 - 3D - Face Plaine
» Coding » Sdcc - 16 - 3D - Temps Reel Basic
» Coding » Sdcc - 18 - 3D - Fil de Fer

QUE DIT LA LOI FRANÇAISE:

L'alinéa 8 de l'article L122-5 du Code de la propriété intellectuelle explique que « Lorsque l'œuvre a été divulguée, l'auteur ne peut interdire la reproduction d'une œuvre et sa représentation effectuées à des fins de conservation ou destinées à préserver les conditions de sa consultation à des fins de recherche ou détudes privées par des particuliers, dans les locaux de l'établissement et sur des terminaux dédiés par des bibliothèques accessibles au public, par des musées ou par des services d'archives, sous réserve que ceux-ci ne recherchent aucun avantage économique ou commercial ». Pas de problème donc pour nous!

CPCrulez[Content Management System] v8.7-desktop/cache
Page créée en 099 millisecondes et consultée 1600 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.