0/5 (8 avis)
Vue 8 164 fois - Téléchargée 406 fois
#include<bios.h> #include<math.h> #include<stdlib.h> #include<sys/nearptr.h> char *ecran; //pointeur sur mémoire vidéo char *virtuel; //pointeur sur l'écran virtuel ///////////////////////////////////////////////////// // Initialisation du mode vga // ///////////////////////////////////////////////////// int init_vga_mode(void) { union REGS regs; __djgpp_nearptr_enable(); ecran=(char *)(0xA0000 + __djgpp_conventional_base); if((virtuel=(char *)malloc(320*200))==NULL) { return(1); } regs.h.ah=0x00; regs.h.al=0x13; int86(0x10,®s,®s); return(0); } ////////////////////////////// // Affichage d'un pixel // ////////////////////////////// void putpixel(int x, int y, int color) { virtuel[(y*320)+x]=color; } ///////////////////////////////////////////////////////////////////////// //Copie la mémoire de l'écran virtuel dans la mémoire vidéo // /////////////////////////////////////////////////////////////////////// void copyecran() { memcpy(ecran,virtuel,64000); } /////////////////////////////////////////////////////////////////// // Vide la mémoire de l'écran virtuel // ///////////////////////////////////////////////////////////////// void effacecran() { memset(virtuel,0,64000); } /////////////////////////////////////////////////////////////////// // Attente du retour du faisceau verticale // ///////////////////////////////////////////////////////////////// void verticale() { while (inp(0x3DA) & 8); while (!(inp(0x3DA) & 8)); } //////////////////////////////// // Fonction cube // /////////////////////////////// void cube(void) { double x1, y1, z, x, y, x2, y2, z2, x3, y3, z3, x4, y4, z4; int i; double a, j; int pointx[8]={100,100,100,100,-100,-100,-100,-100}; int pointy[8]={100,-100,-100,100,-100,100,100,-100}; int pointz[8]={-100,-100,100,100,-100,-100,100,100}; while(!kbhit()) //tend qu'aucune touche n'est saisie { for(j=0; j<=360; j+=1) { effacecran(); a = (M_PI*j)/(180); for(i=0; i<8; i++) { x = pointx[i]; y = pointy[i]; z = pointz[i]; ///////////////////////////////////////////////////// // calcul de rotation des points en 3D // //////////////////////////////////////////////////// x2= z*sin(a)+x*cos(a); z2= z*cos(a)-x*sin(a); y3= y*cos(a)-z2*sin(a); z3= y*sin(a)+z2*cos(a); x4= y3*sin(a)+x2*cos(a); y4= y3*cos(a)-x2*sin(a); ///////////////////////////////////////////////////// // Projection des points 3D en 2D // //////////////////////////////////////////////////// x1 = 160 + (256*x4)/(640+z3); y1 = 100 - (256*y4)/(640+z3); putpixel(x1,y1,11); } verticale(); //Attend le retour du faisceau vertical copyecran(); //Affiche la scène } } } main(void) { init_vga_mode(); cube(); }
21 avril 2007 à 02:01
Bon, je ne sais pas si j'ai bien tout pigé, vous pourrez trouver plus d'informations ici: http://www.asmfr.com/code.aspx?ID=15343
Si quelqu'un pouvait nous éclairer sur le sujet ce serait sympa.
En tout cas merci à tout ceux qui ont posté des commentaires sur cette source.
++
Bouba
20 avril 2007 à 17:51
Moi aussi l'exe ne se lance pas. Sa fais quelque moi que j'aiser de faire une biblio grafique. Pour sela je m'inspir de code dons pratiquement aucun ne fonction. Je suis sur XP et il se peux que se fameux Bilgaite est temter de bloquer les acser memoir. En effet si nous faisont des aisser sur 98 les code tourne. Il ne me meque plus ca faire des aiser sur linux. Voila j'ai temter de deverser se broulli. Si quellequn pourez m'eclairé je lui serai reconaissent. ++
4 nov. 2006 à 17:53
Moi non plus je n'arrive pas a faire fonctonner l'application. il n'y a rien qui s'affiche...
19 déc. 2004 à 20:27
Apportes-y un peu de correction. Ensuite j'y pourrai faire de commentaires.
12 mars 2003 à 19:55
Alé, a+.
Bouba
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.