Jump to content

  • Log In with Google      Sign In   
  • Create Account


#ActualDunge

Posted 20 September 2012 - 03:43 PM

I have "something" that I coded in 2004 when I was still a young newbie programmer. It's pure C (no classes) with french variable names and comments and probably very unstable and very badly coded (static array and such) but since I have it I'll paste it here. "Charger" is load, "Afficher" is draw.

[source lang="cpp"]struct point3D{ float X; float Y; float Z;};struct PointsAsso{ int pt1; int pt2; int pt3;};struct PointsTexture{ float X; float Y;};struct Association{ PointsAsso ptModele; PointsAsso ptTexture;};struct Modele{ point3D tabPointsModele[512]; PointsTexture tabPointsTexture[512]; Association tabAsso[512]; int nbAsso;};void M2500_CHARGER_MODELE(char *nomFichier,Modele *nomModel){ FILE *fichierModele; fichierModele = fopen(nomFichier,"r"); char tempCar; char tempChaine[255]; int i =0; int j =0; int k =0; int longueur; while (!feof(fichierModele)) { tempCar = fgetc(fichierModele); if(tempCar == 'v') //point d'un sommet { tempCar = fgetc(fichierModele); if(tempCar == ' ') { fscanf(fichierModele,"%f %f %f",&nomModel->tabPointsModele[i].X,&nomModel->tabPointsModele[i].Y,&nomModel->tabPointsModele[i].Z); i++; } if(tempCar == 't') //point d'une texture { tempCar = fgetc(fichierModele); fscanf(fichierModele,"%f %f",&nomModel->tabPointsTexture[j].X,&nomModel->tabPointsTexture[j].Y); j++; } } if(tempCar == 'f') //face (association sommet/texture) { tempCar = fgetc(fichierModele); fgets(tempChaine,255,fichierModele); nomModel->nbAsso++; //pt1 modele nomModel->tabAsso[k].ptModele.pt1 = atoi(tempChaine); //pt1 texture longueur = M2510_OBTENIR_LONGUEUR_ENTIER(nomModel->tabAsso[k].ptModele.pt1); strcpy(tempChaine, &tempChaine[longueur+1]); nomModel->tabAsso[k].ptTexture.pt1 = atoi(tempChaine); //pt2 modele longueur = M2510_OBTENIR_LONGUEUR_ENTIER(nomModel->tabAsso[k].ptTexture.pt1); strcpy(tempChaine, &tempChaine[longueur+2]); nomModel->tabAsso[k].ptModele.pt2 = atoi(tempChaine); //pt2 texture longueur = M2510_OBTENIR_LONGUEUR_ENTIER(nomModel->tabAsso[k].ptModele.pt2); strcpy(tempChaine, &tempChaine[longueur+1]); nomModel->tabAsso[k].ptTexture.pt2 = atoi(tempChaine); //pt3 modele longueur = M2510_OBTENIR_LONGUEUR_ENTIER(nomModel->tabAsso[k].ptTexture.pt2); strcpy(tempChaine, &tempChaine[longueur+2]); nomModel->tabAsso[k].ptModele.pt3 = atoi(tempChaine); //pt3 texture longueur = M2510_OBTENIR_LONGUEUR_ENTIER(nomModel->tabAsso[k].ptModele.pt3); strcpy(tempChaine, &tempChaine[longueur+1]); nomModel->tabAsso[k].ptTexture.pt3 = atoi(tempChaine); k++; } } fclose(fichierModele);}int M2510_OBTENIR_LONGUEUR_ENTIER(int entier){ if (entier < 10) return 1; if (entier >= 10 && entier < 100) return 2; if (entier >= 100 && entier < 1000) return 3; if (entier >= 1000 && entier < 10000) return 4; else return 0;}void M4240_AFFICHER_MODELE(float x,float y,float z, struct Modele *nomModel, int numTexture, float grosseur, bool rotation, float deltaT){ static float rot; glPushMatrix(); //Conserve l'ancienne matrice glTranslatef(x,y,z); //Bouge à la position de l'objet rot+= deltaT*2; //Tourner par rapport au temps glScalef(grosseur, grosseur, grosseur); //Change la grosseur (modèles pas sauvés tous pareil) if(rotation) glRotatef(rot,0,0,1); if(numTexture != -1) glBindTexture(GL_TEXTURE_2D, numTexture); else glBindTexture(GL_TEXTURE_2D, 0); glBegin(GL_TRIANGLES); for (int i = 0; i < nomModel->nbAsso; i++) { int AssoMod1 = nomModel->tabAsso[i].ptModele.pt1; int AssoMod2 = nomModel->tabAsso[i].ptModele.pt2; int AssoMod3 = nomModel->tabAsso[i].ptModele.pt3; int AssoTex1 = nomModel->tabAsso[i].ptTexture.pt1; int AssoTex2 = nomModel->tabAsso[i].ptTexture.pt2; int AssoTex3 = nomModel->tabAsso[i].ptTexture.pt3; glTexCoord2f( nomModel->tabPointsTexture[AssoTex1-1].X, nomModel->tabPointsTexture[AssoTex1-1].Y); glVertex3f( nomModel->tabPointsModele[AssoMod1-1].X, nomModel->tabPointsModele[AssoMod1-1].Y, nomModel->tabPointsModele[AssoMod1-1].Z); glTexCoord2f( nomModel->tabPointsTexture[AssoTex2-1].X, nomModel->tabPointsTexture[AssoTex2-1].Y); glVertex3f( nomModel->tabPointsModele[AssoMod2-1].X, nomModel->tabPointsModele[AssoMod2-1].Y, nomModel->tabPointsModele[AssoMod2-1].Z); glTexCoord2f( nomModel->tabPointsTexture[AssoTex3-1].X, nomModel->tabPointsTexture[AssoTex3-1].Y); glVertex3f( nomModel->tabPointsModele[AssoMod3-1].X, nomModel->tabPointsModele[AssoMod3-1].Y, nomModel->tabPointsModele[AssoMod3-1].Z); } glEnd(); glPopMatrix(); //Remet l'ancienne matrice}[/source]

#1Dunge

Posted 20 September 2012 - 03:41 PM

I have "something" that I coded in 2004 when I was still a young newbie programmer. It's pure C (no classes) with french variable names and comments and probably very unstable and very badly coded but since I have it I'll paste it here. "Charger" is load, "Afficher" is draw.

[source lang="cpp"]struct point3D{ float X; float Y; float Z;};struct PointsAsso{ int pt1; int pt2; int pt3;};struct PointsTexture{ float X; float Y;};struct Association{ PointsAsso ptModele; PointsAsso ptTexture;};struct Modele{ point3D tabPointsModele[512]; PointsTexture tabPointsTexture[512]; Association tabAsso[512]; int nbAsso;};void M2500_CHARGER_MODELE(char *nomFichier,Modele *nomModel){ FILE *fichierModele; fichierModele = fopen(nomFichier,"r"); char tempCar; char tempChaine[255]; int i =0; int j =0; int k =0; int longueur; while (!feof(fichierModele)) { tempCar = fgetc(fichierModele); if(tempCar == 'v') //point d'un sommet { tempCar = fgetc(fichierModele); if(tempCar == ' ') { fscanf(fichierModele,"%f %f %f",&nomModel->tabPointsModele[i].X,&nomModel->tabPointsModele[i].Y,&nomModel->tabPointsModele[i].Z); i++; } if(tempCar == 't') //point d'une texture { tempCar = fgetc(fichierModele); fscanf(fichierModele,"%f %f",&nomModel->tabPointsTexture[j].X,&nomModel->tabPointsTexture[j].Y); j++; } } if(tempCar == 'f') //face (association sommet/texture) { tempCar = fgetc(fichierModele); fgets(tempChaine,255,fichierModele); nomModel->nbAsso++; //pt1 modele nomModel->tabAsso[k].ptModele.pt1 = atoi(tempChaine); //pt1 texture longueur = M2510_OBTENIR_LONGUEUR_ENTIER(nomModel->tabAsso[k].ptModele.pt1); strcpy(tempChaine, &tempChaine[longueur+1]); nomModel->tabAsso[k].ptTexture.pt1 = atoi(tempChaine); //pt2 modele longueur = M2510_OBTENIR_LONGUEUR_ENTIER(nomModel->tabAsso[k].ptTexture.pt1); strcpy(tempChaine, &tempChaine[longueur+2]); nomModel->tabAsso[k].ptModele.pt2 = atoi(tempChaine); //pt2 texture longueur = M2510_OBTENIR_LONGUEUR_ENTIER(nomModel->tabAsso[k].ptModele.pt2); strcpy(tempChaine, &tempChaine[longueur+1]); nomModel->tabAsso[k].ptTexture.pt2 = atoi(tempChaine); //pt3 modele longueur = M2510_OBTENIR_LONGUEUR_ENTIER(nomModel->tabAsso[k].ptTexture.pt2); strcpy(tempChaine, &tempChaine[longueur+2]); nomModel->tabAsso[k].ptModele.pt3 = atoi(tempChaine); //pt3 texture longueur = M2510_OBTENIR_LONGUEUR_ENTIER(nomModel->tabAsso[k].ptModele.pt3); strcpy(tempChaine, &tempChaine[longueur+1]); nomModel->tabAsso[k].ptTexture.pt3 = atoi(tempChaine); k++; } } fclose(fichierModele);}int M2510_OBTENIR_LONGUEUR_ENTIER(int entier){ if (entier < 10) return 1; if (entier >= 10 && entier < 100) return 2; if (entier >= 100 && entier < 1000) return 3; if (entier >= 1000 && entier < 10000) return 4; else return 0;}void M4240_AFFICHER_MODELE(float x,float y,float z, struct Modele *nomModel, int numTexture, float grosseur, bool rotation, float deltaT){ static float rot; glPushMatrix(); //Conserve l'ancienne matrice glTranslatef(x,y,z); //Bouge à la position de l'objet rot+= deltaT*2; //Tourner par rapport au temps glScalef(grosseur, grosseur, grosseur); //Change la grosseur (modèles pas sauvés tous pareil) if(rotation) glRotatef(rot,0,0,1); if(numTexture != -1) glBindTexture(GL_TEXTURE_2D, numTexture); else glBindTexture(GL_TEXTURE_2D, 0); glBegin(GL_TRIANGLES); for (int i = 0; i < nomModel->nbAsso; i++) { int AssoMod1 = nomModel->tabAsso[i].ptModele.pt1; int AssoMod2 = nomModel->tabAsso[i].ptModele.pt2; int AssoMod3 = nomModel->tabAsso[i].ptModele.pt3; int AssoTex1 = nomModel->tabAsso[i].ptTexture.pt1; int AssoTex2 = nomModel->tabAsso[i].ptTexture.pt2; int AssoTex3 = nomModel->tabAsso[i].ptTexture.pt3; glTexCoord2f( nomModel->tabPointsTexture[AssoTex1-1].X, nomModel->tabPointsTexture[AssoTex1-1].Y); glVertex3f( nomModel->tabPointsModele[AssoMod1-1].X, nomModel->tabPointsModele[AssoMod1-1].Y, nomModel->tabPointsModele[AssoMod1-1].Z); glTexCoord2f( nomModel->tabPointsTexture[AssoTex2-1].X, nomModel->tabPointsTexture[AssoTex2-1].Y); glVertex3f( nomModel->tabPointsModele[AssoMod2-1].X, nomModel->tabPointsModele[AssoMod2-1].Y, nomModel->tabPointsModele[AssoMod2-1].Z); glTexCoord2f( nomModel->tabPointsTexture[AssoTex3-1].X, nomModel->tabPointsTexture[AssoTex3-1].Y); glVertex3f( nomModel->tabPointsModele[AssoMod3-1].X, nomModel->tabPointsModele[AssoMod3-1].Y, nomModel->tabPointsModele[AssoMod3-1].Z); } glEnd(); glPopMatrix(); //Remet l'ancienne matrice}[/source]

PARTNERS