CODINGSDCC TUT'S PAR STEPHBB75 ★ 3D Fil de fer ★

Sdcc - 18 - 3D - Fil de FerCoding Sdcc Tut's Par Stephbb75

3D temps IREEL

Fil de fer


On vas partir de notre fichier cubep2.c pour faire un affichage en fil de fer, et non en point.
Il faut déjà ajouter la fonction lineBresenham à notre sources, puis une fonction pour dessiner des trais et non des point. J'ai volontairement fait des trais de couleur différente pour "voir" un peut mieux, voici cette fonction :


void ligne(int a, int b, unsigned char couleur)
{
  lineBresenham(Point2D[a].x,Point2D[a].y,Point2D[b].x,Point2D[b].y, couleur);
}

void FilDeFer(unsigned char couleur)
{
 // On affiche la face avant
 ligne(0,1,1); ligne(1,2,1);
 ligne(2,3,1); ligne(3,0,1);

 // Puis la face arriere
 ligne(4,5,2); ligne(5,6,2);
 ligne(6,7,2); ligne(7,4,2);

 // Et enfin les aretes restantes
 ligne(0,5,3);
 ligne(1,4,3);
 ligne(2,7,3);
 ligne(3,6,3);
}

Aller un petit run"cubef1 et cela donne quoi ?


L'animation est fidèle en temps vis à vis d'un CPC


Alors, cela donne quand même pas trop mal, on a toujours un peut de temps pour le calcule et on voie le cube se dessiner. Pour éviter cela, on vas utiliser un double buffer, on en affiche un, pendant se temps on dessine dans l'autre, quand on a fini, on affiche le buffer et on redessine dans l'autre.
On vas donc ajouter une méthode pour swaper l'adresse de l'écran du CPC, il faut modifier la fonction de dessin et d'effacement pour dessiner et effacer le bon écran.
Pour la fonction CLS_WidthPile la modif j'y suis allé un peut à la bourrin, y'a plus propre :-)
On vas déclarer deux variables globale CurentSCR qui est l'écran affiché et DrawSCR qui est l'écran sur lequel on dessine.
On va également retirer toutes les écritures de texte, car comme nous passons par les fonctions système, elle ne peuvent écrire que sur l'écran C000. pour que cela fonctionne sur les autres, il faudra les réécrire.
Toutes ces modification se trouve dans le fichier cubef2.c, voyons ce que cela donne.


L'animation est fidèle en temps vis à vis d'un CPC

On vas maintenant utiliser la fonction PutPixelFastMode1 pour le dessin, cela vas nous faire encore gagner un peut de temps pour l'affichage, bien que finalement se ne soit pas trop cette partie qui prenne du temps, mais le calcule de rotation.
Avec cubef3.c nous avons notre fonction PutPixelFastMode1 pour le dessin, cela donne donc cela :


L'animation est fidèle en temps vis à vis d'un CPC


Alors cela fait un peut mieux, mais il reste encore à optimiser le temps de calcule...

Voila, comme d'hab, le tout se trouve dans se ZIP

stephbb75

ANNÉE: 2013
★ AUTEUR: Stephbb75

Page précédente : Sdcc - 17 - 3D - Trace Points

CPCrulez[Content Management System] v8.7-desktop/cache
Page créée en 104 millisecondes et consultée 951 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.