Make3DFrame


Make3DFrame est un utilitaire sur PC permettant de générer pour le CPC des séquences animées d'objets en 3D ou 2D.
Cet outils composé d'un bon nombre d'options comporte également un module de création d'objets ainsi qu'un module de création de séquences.
Make3DFrame a été entièrement réalisé en Visual C++ par Demoniak que je remercie pour son écoute et pour m'avoir véritablement "pondu à la commande" l'objet de mes désirs !
Make3DFrame étant également le fruit de nombreuses discutions, cogitations, tests... mais étant aussi un poil complexe, une petite documentation devenait, de fait, obligatoire.
La voici donc et nous espérons qu'elle sera assez explicite afin que vous puissiez sans trop de difficultés et par vous même réaliser de jolies petites animations/démos/intros pour votre CPC adoré.
Par ailleurs, n'ayant très certainement pas pensé à tout, vos suggestions, demandes d'évolutions, critiques constructives ou négatives, rapports de bugs, améliorations des routines z80 ... etc... sont bien évidemment les bienvenues !
Sur ce, amusez-vous bien !
Demoniak & Tronic / GPA

L'archive de Make3DFrame comprend :
- Un exécutable "Make3dFrame.exe" : Le soft en question.
- Un répertoire "OBJ" : Une bibliothèque d'objets.
- Un répertoire "Z80" : Les routines assembleurs (commentées) pour utilisation sur CPC.
- Un répertoire "DSK" : Quelques-uns de nos résultats obtenus.
- Un répertoire "DOC" : Cette documentation.


Explications de l'interface






- Zone Principale "bleue/noire" :

Cette zone comprend l'endroit où s'affiche et s'anime un objet.
La zone (volontairement bleue au démarrage) correspond à la zone d'un écran standard du CPC.
La zone (volontairement noire au démarrage) correspond à la zone du "border droit" du CPC.
Cette dernière zone (noire) est "flexible".
C'est à dire que l'on peut l'étendre ou la réduire afin de réaliser des animations d'objets dans un écran reformatté sur CPC à l'aide du registre 1 du CRTC. (Voir zone "Paramètre écran CPC" : CRTC R1 + bouton appliquer)
Par défaut la valeur est à 40 (càd Registre 1 du CRTC = 40) ce qui correspond à un format horizontal d'écran standard sur CPC.
Vous pouvez donc agrandir ou rétrecir cette zone en modifiant 40 par une intervalle comprise entre 1 et 64.

Juste en dessous, vous avez accès à une palette des couleurs qui correspond aux ink 0 à 15 du CPC.
En cliquant sur une des 16 cases-couleur, vous avez la possibilité de les modifier à votre convenance, selon les 27 couleurs disponibles sur CPC, ce qui bien évidemment impactera les couleurs de votre objet et son environnement.



- Zone "Source (objet)" :

Fichier objet :
En cliquant sur ce bouton, vous demandez à Make3DFrame d'importer un fichier-objet déjà existant au format dit ".asc".
Le format ".asc" est à la base un format d'objet réalisé sous 3d studio sur PC.
Sa structure est simplement composée d'une série de coordonnées x,y,z de vertex/points/faces formant l'objet en question.
Pour en savoir plus sur sa structure, vous pouvez éditer un ".asc" tout simplement sous n'importe quel éditeur ascii (notepad, blocnote, word...) afin de vous faire une idée plus précise.
Plus pragmatiquement, un fichier objet ".asc" peut-être la représentation d'un cube, d'un canard, d'une pyramide, d'une tasse à café, d'un vaisseau spatial... bref, toute "chose" est réalisable !
Pour information, sachez qu'il existe sur le net de nombreux sites répertoriant des bibliothèques d'objets au format ".asc" (google est votre ami)
Sachez également qu'il existe des convertisseurs sur PC qui permettent à partir d'autres formats (3ds...) d'obtenir un ".asc" (google là encore est votre ami)

Recentrer l'objet :
Lorsque cette case est cochée, notre objet s'animera sur lui même.
Non cochée, notre objet ne tournera donc pas sur lui même.

Nombre d'images + pas + première :
C'est le nombre d'images que va comporter notre animation d'objet. Il est par défaut fixé à 60 mais son intervalle peut-être comprise entre 0 et 359.
C'est également le nombre de séquences/frames que va comporter notre objet une fois exporté sur CPC.
Ces séquences/frames, consécutivement misent bout à bout, formeront l'animation de notre objet sur CPC.
Vous avez également la possibilité de faire démarrer votre animation à une séquence/frame bien définie et de sauter ces séquences/frames selon un pas.
C'est à celà que servent donc respectivement les valeurs "première" et "pas".
Plus simplement, celà se comporte comme une boucle classique en Basic du type "FOR I = 0 TO 60 STEP 2" (ou 0 = première et 2 = pas).



- Zone "Destination" :
Fichier CPC :
C'est ici que l'on donnera le nom de nos fichiers, de notre projet d'animation pour nos exports sur CPC.
Par défaut deux fichiers binaires seront créés. Un de données et un second dit d'index.
Le premier comportera les datas de notre objet (composé d'octets) & son mouvement (composé d'adresses écrans CPC) le tout "comprimés" dans un format dit "delta packing".
En gros, le delta packing (déjà utilisé par Overflow/Logon-System dans les années 1992 dans ses previews "all in 3d" et probablement par d'autres plus tard!) affiche/efface en "frame n" seulement ce qui change par rapport à la "frame n-1". A noter aussi que ce qui est identique d'une frame à l'autre n'est bien évidemment pas re-stocké ni affiché.
Le second fichier, comporte une table d'index qui pointe vers ces "frame n", "frame n+1", frame "n+2".
A noter que l'on peut également dans certains cas se passer de ce fichier d'index car chaque séquence/frame est délimitée par un flag.

Sauvegarde source assembleur datas :
Cochée, cette case permet l'export d'un fichier ascii (.asm) utilisable depuis un assembleur (winape ou maxam) comprenant ni plus ni moins les mêmes données que les deux fichiers binaires (datas+index) mais sous forme de db & dw.
Vous constaterez en éditant ce fichier ".asm", qu'il se compose sous la forme suivante :
"&00,&c0,&ff ...etc..." ce qui donne, appliqué à une routine d'affichage en assembleur à peu près ceci :
ld sp,table    ; sp pointe sur la table
pop hl          ; hl=&c000 et sp=sp+2
dec sp          ; sp=sp-1
pop af          ; a=&ff
ld (hl),a        ; on met la valeur &ff dans &c000

Activer la compression :
Le delta packing permettant de fait une compression notoire, il est également possible en cochant cette case, d'appliquer une compression supplémentaire.
Grossièrement, celle ci, s'applique sur les adresses écrans qui potentiellement se succèdent pour l'affichage de notre objet (ex: &c000,&c001,&c002,&c003)
Nous avons observé que les résultats (très variables selon l'objet!) obtenus sont en moyenne de l'ordre de 30% de compression par rapport au mode sans, ce qui n'est finalement pas négligeable.

Gestion banques memoires (128K) :
Cochée, cette case permet la même chose que la "sauvegarde source assembleur datas" mais sous forme pré-machée et fragmentée pour une utilisation dans les 4 bank-mémoires supplémentaires de l'amstrad (&c0 + &c4, &c5, &c6, &c7)

Export des .SCR de chaque image :
Cochée, cette case génère des copies d'écrans de cpc (des .SCR de 16ko) de vos objets/animations et ce autant de fois que sera souhaitée le nombre d'images/frames et son pas.
Vous pourrez d'ailleurs les visualiser sur votre CPC en les loadant simplement sous basic : load "fichierXXX.scr",&c000
Ou encore les visualiser sous l'excellentissime utilitaire graphique de Demoniak, ConvImgCPC.
Pour information, le mode écran CPC et les couleurs sont exportés respectivement en &D7D0 et à partir de &D7D1.

Mode export "Sprites" + leurs options :
Cochée, cette case exportera le fichier ascii (.asm) de votre animation sous forme de sprites, à savoir uniquement les valeurs (octets) représentant l'objet et donc sans plus aucune adresse écran.

Si la case "taille simple" n'est pas cochée vos "n-frames/sprites" comprendront en en-tête les octets suivants :
DB      #25, #59, #2A, #6E     ' (XD,YD,XA,YA)
XD = X de départ - XA = X d'arrivée
YD = Y de départ - YA = Y d'arrivée
Notez que :
(XA-XD)+1 = taille en octets de la largeur de votre sprite, soit dans ce cas : &2A-&25+1 = &06
(YA-YD)+1 = taille en octets de la hauteur de votre sprite, soite dans ce cas : &6E-&59+1 = &16

Si la case "taille simple" est cochée vos "n-frames/sprites" comprendront directement la largeur+hauteur de votre sprite et en en-tête vous trouverez donc les octets suivants :
DB      #06, #16     ' (TailleX,TailleY)
Soit dans notre cas :
TailleX = taille en octets de la largeur de votre sprite = &06
TailleY = taille en octets de la hauteur de votre sprite = &16

Le bouton "mode ligne" exporte notre sprite linéairement (ou plus communément dit en largeur ou ligne) :
DB octet-&c000, octet-&c001, octet-&c002, octet-&c003
DB octet-&c800, octet-&c801, octet-&c802, octet-&c803

Le bouton "mode 1 colonne" exporte notre sprite sur une colonne :
DB octet-&c000, octet-&c800, octet-&d000, octet-&d800
DB octet-&c001, octet-&c801, octet-&d001, octet-&d801

Le bouton "mode 2 colonnes" exporte notre sprite sur 2 colonnes :
DB octet-&c000, octet-&c001, octet-&c800, octet-&c801, octet-&d000, octet-&d001
DB octet-&c002, octet-&c003, octet-&c802, octet-&c803, octet-&d002, octet-&d003

Notez que la compression n'est pas utilisable sur les sprites, puisqu'elle est basée sur les adresses écrans consécutives et qu'un sprite ne contient pas d'adresses écrans...



- Zone de résultats/stats et de lancement/arrêt :
Cette zone, assez intuitive et compréhensible, comprend le déroulé de la génération de notre animation comme son nombre de frames, leurs poids respectifs (compressés ou pas) en octets, le poids total du binaire généré ainsi que quelques alertes, notemment lorsqu'il y a dépassement de capacité mémoire pour le CPC.
Vous y trouverez aussi le bouton "Démarrer" qui comme son nom l'indique, démarre visuellement l'animation & la génération des fichiers pour le CPC.
Quant au bouton "Arrêter", vous l'aurez tous deviné, il permet de stopper l'animation et l'export.



- Zone "Paramètres animation" :
Cette zone contient plusieurs cases, à savoir :
PX : coordonnée x - abscice de départ de l'objet + "valeur" qui est son pas d'incrémentation (ou de décrémentation si ce chiffre est négatif)
Pour faire simple, on incrémente on va vers la droite, on décrémente on va vers la gauche.
PY : coordonnée y - ordonnée de départ de l'objet + "valeur" qui est son pas d'incrémentation (ou de décrémentation si ce chiffre est négatif)
Pour faire simple, on incrémente on va vers le bas, on décrémente on va vers le haut.
ZX : coordonnée z + "valeur" qui est son pas d'incrémentation (ou de décrémentation si ce chiffre est négatif)
Pour faire simple, on incrémente on augmente le zoom, on décrémente on réduit le zoom.

AX : angle en degrés de x au départ + "valeur" qui est son pas d'incrémentation (ou de décrémentation si ce chiffre est négatif)
AY : angle en degrés de y au départ + "valeur" qui est son pas d'incrémentation (ou de décrémentation si ce chiffre est négatif)
AZ : angle en degrés de z au départ + "valeur" qui est son pas d'incrémentation (ou de décrémentation si ce chiffre est négatif)
Pour faire simple, on peut faire bouger son objet dans tout les sens selon les valeurs apposées dans ces cases...

Editeur de séquence + case utiliser séquence :



L'éditeur de séquence, permet comme son nom l'indique de générer, créer, importer et exporter des séquences d'animations/frames.
La fenêtre principale comprend le déroulé de votre séquence. C'est-à-dire les différentes étapes de votre animation en terme de coordonnées (PX, PY, ZX, ZY, AX, AY, AZ) pour respectivement chacunes de vos "n" frames.
- Ces 7 valeurs de l'objet dans une frame "n" (ou Trame) selectionnée sont modifiables via le bouton "Edition". Pour se faire, placez-vous sur une frame (ou Trame), elle s'affiche dans les 7 cases coordonnées. Il vous suffit juste alors de corriger la valeur souhaitée dans l'une de ces 7 cases de coordonnées puis de valider vos changements avec le bouton Edition.
- Le bouton "Insertion" vous permet d'insèrer une frame identique à celle selectionnée à la fin de votre déroulé.
- Le bouton "Suppression" permet quant-à lui de supprimer une frame selectionnée.

Une petite fenêtre de messages de log (Nombre de trames calculées...) est présente et un bouton "Effacer messages" permet de la vider.

Le bouton "Exporter Séquence" sauvegarde/exporte votre séquence au format ".CSV" pour réutilisation sous Excel !

Le bouton "Importer Séquence" load/importe une séquence au format ".CSV" (Excel est ton ami)

Le bouton "Effacer Séquence" efface du soft la séquence active.

Le bouton "Générer séquence depuis paramètres" génère, comme son nom l'indique, la séquence à partir des paramètres fournis dans la zone "Paramètres animation" de la fenêtre principale de Make3DFrame.

Si cochée, la case "Utiliser Séquence" située dans la fenêtre principale de Make3DFrame prendra en compte VOTRE animation créée/importée/stockée dans l'éditeur.
Si pas cochée, ce seront bien évidemment les 14 champs-coordonnées de "Paramètres animation" qui seront utilisés.



Zone
"Paramètres écran CPC" :

Mode 0 : L'objet sera en Mode écran 0 sur CPC.
Mode 1 : L'objet sera en Mode écran 1 sur CPC.
Mode 2 : L'objet sera en Mode écran 2 sur CPC.

#0000 : La plage d'export des datas adresses-écran sera comprise de &0000 à &3fff (CRTC registre 12 = &00)
#4000 : La plage d'export des datas adresses-écran sera comprise de &4000 à &7fff (CRTC registre 12 = &10)
#8000 : La plage d'export des datas adresses-écran sera comprise de &8000 à &bfff (CRTC registre 12 = &20)
#c000 : La plage d'export des datas adresses-écran sera comprise de &c000 à &ffff (CRTC registre 12 = &30)

CRTC R1 + Bouton appliquer :
Permet, comme vu plus haut, de calculer/générer automatiquement nos animations d'objets selon un reformattage écran du CPC via le registre 1 du CRTC.
En clair, celà permet de faire des animations en "overscan" ou "introscan" (ou autre terme à votre convenance!)

Memoire Linéaire (R9=0) :
Cette case cochée permet d'exporter nos adresses écrans de l'objet/animation généré de manière linéaires (+&50 et non +&800 dans le cas d'un R1=40)
A savoir, par exemple, de cette forme : &c000, &c050, &c0a0... Et non plus sous cette forme : &c000,&c800,&d000...
Certains d'entre vous auront tout de suite compris l'utilité de la chose couplée à une mise à zéro du registre 4 et 9 du CRTC qui permet de faire de la rupture ligne à ligne.



- Zone "Fond d'écran" :
Cette zone comprend la possibilité, en cochant les cases adéquats, d'incorporer une image de fond & sa palette à notre animation/objet.
Il suffit simplement de choisir le nom de votre fond en cliquant sur le bouton nom et d'aller chercher votre image qui doit être au format ".SCR" (ConvImgCPC)
La case à cocher "Importer palette" attribuera tout simplement la valeur du mode-écran (stockée en &D7D0) et la palette (stockée en &D7D1) du-dit fichier ".SCR" (ConvImgCPC)



- Zone "Paramètres objet" :
Les cases-boutons "Modes" respectivement cochées permettent à notre objet d'apparaître et d'être exporté soit :
- en points non cachés.
- en point cachés.
- en fil de fer, faces vides, non cachées.
- en fil de fer, faces vides, cachées.
- en fil de fer, faces pleines, cachées.

La case Stylo lignes/points, sélectionne la couleur des points ou contours de notre objet parmis une des 0 à 15 dans la palette.

La case Stylo Fill, sélectionne la couleur des faces pleines de notre objet parmis une des 0 à 15 dans la palette.

Editeur d'objets :



L'éditeur d'objet, est assez intuitif et permet comme son nom l'indique de créer, importer et exporter des objets au format ".asc".

La fenêtre principale bleue est le visuel ou figurera votre objet. C'est également un plan X,Y,Z où vous pourrez construire votre propre objet. Nous vous conseillons pour vos premières créations de prendre une bonne vieille feuille de papier et un crayon et de "dessiner" un objet (ou mieux un petit logo en fil de fer en 2D) dans un plan X,Y en numérotant et notant respectivement les coordonnées de vos points. Puis, de tracer, numéroter et noter également vos faces (ou lignes) formant votre objet via ces points numérotés.

Un objet se compose de :
- Points numérotés de coordonnées X,Y,Z. Vous pourrez en "Editer/Ajouter/Supprimer" dans la zone "Points".
- Faces numérotées qui regroupent 3 points numérotés et qui peuvent être identiques. Vous pourrez en "Editer/Ajouter/Supprimer" dans la zone "Faces".
A noter que vous devrez cliquer sur le bouton "Editer" pour valider chacune de vos nouvelles corrections et/ou entrées.

Un exemple simple en 2D (oublions Z) :
Soit 3 points :
    - Point0(X0,Y0)
    - Point1(X1,Y1)
    - Point2(X2,Y2)
Soit les valeur A,B,C représentant une face :
Cas 1 : Face0 >> A=point0 + B=point0 + C=point0 donnera une "face-invisible-d'un point" reliant le point0 sur lui-même...
Cas 2 : Face0 >> A=point0 + B=point1 + C=point1 donnera une "face-d'une ligne" reliant les point0 et point1 et point1 encore...
Cas 3 : Face0 >> A=point0 + B=point1 + C=point2 donnera une "face-de trois lignes" (un triangle donc) reliant les point0 et point1 et point2.
Cas 4 : Si vous voulez faire un "tracé de deux lignes consécutives", une solution est de faire 2 faces d'une ligne :
    Face0 >> A=point0 + B=point1 + C=point1 (ou) A=point0 + B=point0 + C=point1
    Face1 >> A=point1 + B=point2 + C=point2 (ou) A=point1 + B=point1 + C=point2

En selectionnant le "Mode", comme dans la zone "Paramètre objets" de la fenêtre principale de Make3DFrame, votre objet peut être représenté soit :
- en points non cachés.
- en point cachés.
- en fil de fer, faces vides, non cachées.
- en fil de fer, faces vides, cachées.
- en fil de fer, faces pleines, cachées.

Vous trouverez également 4 "potentiomètres" ajustables :
- Le zoom, qui zoom votre objet.
- Les angles X,Y,Z qui permettent de voir votre objet dans tout les sens.

Le bouton "Modifier Paramètres" permet en cliquant dessus  :
- De modifier les coordonnées du point central sur lequel sont appliqués les angles X,Y,Z.
- D'appliquer dans le cas d'objets trop petits un coefficient zoom-multiplicateur. A noter que ce coefficient multiplicateur peut être massivement lié à l'ensemble des X,Y,Z de vos points ou pas !

Le bouton "Nouvel Objet" permet de ré-initialiser l'ensemble de votre projet d'objet afin d'en construire un nouveau.
Attention, une alerte vous précise bien que votre objet actuel dans l'éditeur sera effacé par le nouveau.

Le bouton "Lire Objet" permet d'importer un objet au format ".asc"

Le bouton "Fusionner Objet" permet de "merger/fusionner" un énième objet à la suite de l'actuel.

Le bouton "Sauver Objet" permet tout simplement de sauvegarder votre projet-objet au format ".asc"