Advertisement
Guest User

hovadina

a guest
Nov 28th, 2014
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.64 KB | None | 0 0
  1. struct point3D
  2. {
  3. float X;
  4. float Y;
  5. float Z;
  6.  
  7. }
  8. ;
  9. struct PointsAsso
  10. {
  11. int pt1;
  12. int pt2;
  13. int pt3;
  14.  
  15. }
  16. ;
  17. struct PointsTexture
  18. {
  19. float X;
  20. float Y;
  21.  
  22. }
  23. ;
  24. struct Association
  25. {
  26. PointsAsso ptModele;
  27. PointsAsso ptTexture;
  28.  
  29. }
  30. ;
  31. struct Modele
  32. {
  33. point3D tabPointsModele[512];
  34. PointsTexture tabPointsTexture[512];
  35. Association tabAsso[512];
  36. int nbAsso;
  37.  
  38. }
  39. ;
  40. void M2500_CHARGER_MODELE(char *nomFichier,Modele *nomModel)
  41. {
  42. FILE *fichierModele;
  43. fichierModele = fopen(nomFichier,"r");
  44. char tempCar;
  45. char tempChaine[255];
  46. int i =0;
  47. int j =0;
  48. int k =0;
  49. int longueur;
  50. while (!feof(fichierModele))
  51. {
  52. tempCar = fgetc(fichierModele);
  53. if(tempCar == 'v') //point d'un sommet
  54. {
  55. tempCar = fgetc(fichierModele);
  56. if(tempCar == ' ')
  57. {
  58. fscanf(fichierModele,"%f %f %f",&nomModel->
  59. tabPointsModele[i].X,&nomModel->
  60. tabPointsModele[i].Y,&nomModel->
  61. tabPointsModele[i].Z);
  62. i++;
  63.  
  64. }
  65. if(tempCar == 't') //point d'une texture
  66. {
  67. tempCar = fgetc(fichierModele);
  68. fscanf(fichierModele,"%f %f",&nomModel->
  69. tabPointsTexture[j].X,&nomModel->
  70. tabPointsTexture[j].Y);
  71. j++;
  72.  
  73. }
  74.  
  75. }
  76. if(tempCar == 'f') //face (association sommet/texture)
  77. {
  78. tempCar = fgetc(fichierModele);
  79. fgets(tempChaine,255,fichierModele);
  80. nomModel->
  81. nbAsso++;
  82. //pt1 modele nomModel->
  83. tabAsso[k].ptModele.pt1 = atoi(tempChaine);
  84. //pt1 texture longueur = M2510_OBTENIR_LONGUEUR_ENTIER(nomModel->
  85. tabAsso[k].ptModele.pt1);
  86. strcpy(tempChaine, &tempChaine[longueur+1]);
  87. nomModel->
  88. tabAsso[k].ptTexture.pt1 = atoi(tempChaine);
  89. //pt2 modele longueur = M2510_OBTENIR_LONGUEUR_ENTIER(nomModel->
  90. tabAsso[k].ptTexture.pt1);
  91. strcpy(tempChaine, &tempChaine[longueur+2]);
  92. nomModel->
  93. tabAsso[k].ptModele.pt2 = atoi(tempChaine);
  94. //pt2 texture longueur = M2510_OBTENIR_LONGUEUR_ENTIER(nomModel->
  95. tabAsso[k].ptModele.pt2);
  96. strcpy(tempChaine, &tempChaine[longueur+1]);
  97. nomModel->
  98. tabAsso[k].ptTexture.pt2 = atoi(tempChaine);
  99. //pt3 modele longueur = M2510_OBTENIR_LONGUEUR_ENTIER(nomModel->
  100. tabAsso[k].ptTexture.pt2);
  101. strcpy(tempChaine, &tempChaine[longueur+2]);
  102. nomModel->
  103. tabAsso[k].ptModele.pt3 = atoi(tempChaine);
  104. //pt3 texture longueur = M2510_OBTENIR_LONGUEUR_ENTIER(nomModel->
  105. tabAsso[k].ptModele.pt3);
  106. strcpy(tempChaine, &tempChaine[longueur+1]);
  107. nomModel->
  108. tabAsso[k].ptTexture.pt3 = atoi(tempChaine);
  109. k++;
  110.  
  111. }
  112.  
  113. }
  114. fclose(fichierModele);
  115.  
  116. }
  117. int M2510_OBTENIR_LONGUEUR_ENTIER(int entier)
  118. {
  119. if (entier <
  120. 10) return 1;
  121. if (entier >
  122. = 10 && entier <
  123. 100) return 2;
  124. if (entier >
  125. = 100 && entier <
  126. 1000) return 3;
  127. if (entier >
  128. = 1000 && entier <
  129. 10000) return 4;
  130. else return 0;
  131.  
  132. }
  133. void M4240_AFFICHER_MODELE(float x,float y,float z, struct Modele *nomModel, int numTexture, float grosseur, bool rotation, float deltaT)
  134. {
  135. static float rot;
  136. glPushMatrix();
  137. //Conserve l'ancienne matrice glTranslatef(x,y,z);
  138. //Bouge à la position de l'objet rot+= deltaT*2;
  139. //Tourner par rapport au temps glScalef(grosseur, grosseur, grosseur);
  140. //Change la grosseur (modèles pas sauvés tous pareil) if(rotation) glRotatef(rot,0,0,1);
  141. if(numTexture != -1) glBindTexture(GL_TEXTURE_2D, numTexture);
  142. else glBindTexture(GL_TEXTURE_2D, 0);
  143. glBegin(GL_TRIANGLES);
  144. for (int i = 0;
  145. i <
  146. nomModel->
  147. nbAsso;
  148. i++)
  149. {
  150. int AssoMod1 = nomModel->
  151. tabAsso[i].ptModele.pt1;
  152. int AssoMod2 = nomModel->
  153. tabAsso[i].ptModele.pt2;
  154. int AssoMod3 = nomModel->
  155. tabAsso[i].ptModele.pt3;
  156. int AssoTex1 = nomModel->
  157. tabAsso[i].ptTexture.pt1;
  158. int AssoTex2 = nomModel->
  159. tabAsso[i].ptTexture.pt2;
  160. int AssoTex3 = nomModel->
  161. tabAsso[i].ptTexture.pt3;
  162. glTexCoord2f( nomModel->
  163. tabPointsTexture[AssoTex1-1].X, nomModel->
  164. tabPointsTexture[AssoTex1-1].Y);
  165. glVertex3f( nomModel->
  166. tabPointsModele[AssoMod1-1].X, nomModel->
  167. tabPointsModele[AssoMod1-1].Y, nomModel->
  168. tabPointsModele[AssoMod1-1].Z);
  169. glTexCoord2f( nomModel->
  170. tabPointsTexture[AssoTex2-1].X, nomModel->
  171. tabPointsTexture[AssoTex2-1].Y);
  172. glVertex3f( nomModel->
  173. tabPointsModele[AssoMod2-1].X, nomModel->
  174. tabPointsModele[AssoMod2-1].Y, nomModel->
  175. tabPointsModele[AssoMod2-1].Z);
  176. glTexCoord2f( nomModel->
  177. tabPointsTexture[AssoTex3-1].X, nomModel->
  178. tabPointsTexture[AssoTex3-1].Y);
  179. glVertex3f( nomModel->
  180. tabPointsModele[AssoMod3-1].X, nomModel->
  181. tabPointsModele[AssoMod3-1].Y, nomModel->
  182. tabPointsModele[AssoMod3-1].Z);
  183.  
  184. }
  185. glEnd();
  186. glPopMatrix();
  187. //Remet l'ancienne matrice
  188. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement