Pour afficher un modèle 3d

Soyez le premier à donner votre avis sur cette source.

Vue 1 793 fois - Téléchargée 269 fois

Description

En 2003 la très célèbre université de Princeton a publié un catalogue d'objets numériques tridimensionnels définis en format off, le plus simple des formats 3d : http://shape.cs.princeton.edu/benchmark/

Avec ces modèles toujours disponibles et bien connus, on peut obtenir les sources de quelques utilitaires où offviewer.cpp sert à afficher les objets en format off. Ce programme a déjà été repris et publié à l'identique ou en variante de nombreuses fois.

La variante que je propose ajoute un mode d'emploi, et plusieurs commandes complémentaires pour afficher ou effacer les faces, les arêtes ou les deux, pour éteindre ou allumer l'une ou l'autre des deux sources lumineuses, pour afficher les statistiques du modèle, pour afficher les faces en mode plat ou continu et surtout pour sauvegarder l'image actuellement affichée une ou plusieurs fois, après avoir fait des translations, rotations ou zoom du modèle. La lettre <M> donne accès au mode d'emploi.

Le format d'image ppm avec P3 en nombre magique peut être lu avec plusieurs programmes de traitement d'images. Il peut aussi être converti en format bmp, jpg, tga ou autres soit localement soit en ligne sur Internet. Enfin, on peut assez facilement produire directement un autre format d'image.

D'un point de vue mode de programmation, il y a des formulations qui ne sont plus recommandées : les variables globales et la forme maintenant obsolète d'OpenGL avec glBegin et glEnd. On peut aussi revoir cela, c'est conservé ici par fidélité à l'original.

L'intérêt principal de ce programme est de montrer comment OpenGL en programmation via glut permet d'afficher un messagebox et de connaître ou de commander les données caractéristiques de la fenêtre visualisée. Quant à l'intérêt du format off c'est d'être très facile à renseigner à partir des autres formats d'objets 3d : il comprend uniquement une liste de sommets et une liste simple de faces polygonales.

Source :

/***  Sauvegarde de l'image actuellement affichée  ***/
   if(wrimg) {
      std::string name;
      bool goodname;
      FILE *fp;   
      do {
         goodname = true;
         ++numimg;
         name = nomfi;
         std::size_t found = name.find_last_of('.');
         name = name.substr(0, found) + "-";
         std::stringstream ss;
         ss << numimg;
         name = name + ss.str() + ".ppm";
         if(fp = fopen(name.c_str(), "r")) { 
            // si ce nom d'image est déjà utilisé ...
            goodname = false;
            fclose(fp);
         }  
      }while(!goodname);
      fp = fopen(name.c_str(), "w");
      int w = glutGet(GLUT_WINDOW_WIDTH);
      int h = glutGet(GLUT_WINDOW_HEIGHT);
      GLubyte* pixels = new GLubyte[w*h*3];
      glReadBuffer(GL_FRONT);
      glReadPixels(0, 0, w, h, GL_RGB, GL_UNSIGNED_BYTE, pixels);
      fprintf(fp, "P3n%d %d 255n", w, h);  
      for(int i = h-1; i >= 0; i--) 
         for(int j = 0; j < w; j++) {
            for(int k=0; k<3; k++) 
               fprintf(fp, "%d ", (int)pixels[i*w*3+j*3+k]);
            fprintf(fp, "n");
      }
      delete [] pixels;
      fclose(fp);
      wrimg = false;
   }

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

William VOIROL
Messages postés
264
Date d'inscription
mardi 12 décembre 2006
Statut
Membre
Dernière intervention
10 juin 2019
-
Bonjour pgl10,
Merci pour cet article, car il m’a rappelé qu’il existait un format 3D encore plus simple que OBJ.
Le format OFF avait, pour moi, passé dans les oubliettes, car il était difficile d’en trouver un "viewer".
Voilà, le trou est comblé, et j'adapterai prochainement mon logiciel sur les tores.
pgl10
Messages postés
313
Date d'inscription
samedi 18 décembre 2004
Statut
Membre
Dernière intervention
6 juillet 2019
1 -
Bonjour William VOIROL,
Merci pour ce commentaire. Le format off a été développé en 1986 par Randi J. Rost à Digital Equipment Corporation's. Il comporte plusieurs variantes, dont l'une, peu utilisée, avec indication de couleur pour les faces. Mais c'est la forme la plus simple avec seulement une liste de sommets et une liste de faces polygonales qui permet de renseigner la géométrie d'un objet numérique sans indiquer les normales, la texture, la nature des matériaux, etc. Il existe d'autres viewers pour le format off et il existe des viewers multi-formats qui acceptent le format off. Ce viewer en provenance de Princeton a l'avantage d'être simple et efficace. Il était donc justifié d'en faire un usage un peu plus confortable, tout en notant un mode de programmation obsolète. Nota : les numéros de sommets dans les faces commencent à 0 dans le format off et à 1 dans le format obj.
William VOIROL
Messages postés
264
Date d'inscription
mardi 12 décembre 2006
Statut
Membre
Dernière intervention
10 juin 2019
-
Bonjour pgl10,
Merci pour tous ces renseignements.
Voilà, je viens de charger l’article Tore de Moebius en format OFF.

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.