Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement