3D temps IREELFil 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 ★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser... |
|
|