Viewer 3d et générateur 2d win32 opengl vc++7

Soyez le premier à donner votre avis sur cette source.

Vue 22 771 fois - Téléchargée 3 233 fois

Description

Il s'agit d'un logiciel de visualisation d'objets 3D supportant les textures
Il peut lire 3 formats et on peux facilement en ajouter :
- Wavefront OBJ (format texte)
- 3D Studio
- Milkshape (au format binaire)

Il y a des options d'affichage, il supporte le glisser/déplacer (drag'n drop), il calcule et peut afficher les bouding boxes, si l'objet est composé de plusieurs parties on peut en désactiver, on peux visualiser d'un simple clic une partie de l'objet, l'arborescence de l'objet sert d'interface aux manipulations, une fonction permet de "poser l'objet au sol" (pas de coordonnées en dessous de la verticale 0), fonction d'optimisation de l'objet retirant les vertices en doubles et les faces qui ont 2 points communs, fonction de génération de silhouette, pas de fonction de sauvegarde : à vous de d'intégrer celle que vous voulez

Vous pouvez donc trouver dans le code des tas de trucs qui peuvent vous plaire :
- des fonctions de math (vecteurs, matrices, ...)
- une classe de gestion de textures
- une classe de gestion de fichier log
- une classe de gestion d'objet 3D
- de la gestion de fenêtre en Win32
- une fonction de chargement JPEG !!
- une classe de gestion du temps (basique)
- une classe de chargement 3DS (pas de moi)
- une classe de chargement milkshape (pas de moi à la base mais un peu modifiée)
- une fonction de chargement wavefront
- du treeview
- gestion d'un fichier .ini (sauvegarde/chargement) pour conserver les préférences
- et bien d'autres ...

bon "amusement"
Shenron

PS: un grand merci à http://nehe.gamedev.net de m'avoir permis d'en arriver là, il est ma principale source d'apprentissage OpenGL

Conclusion :


Quelques petites explications sur le fonctionnement :
La partie gauche affiche la 3D, à droite la 2D
si vous avez un objet 3D vous le déplacez et le déposez dans l'application, il se charge, sinon menu "Fichiers" -> "Charger 3D" (vous aviez devinés ?__?)

Dans "Affichage 3D" vous pouvez activer/désactiver/modifier des options d'affichage pour la 3D
l'option "Afficher uniquement la sélection" permet de n'afficher que les éléments qui sont actifs (j'explique un peu plus loin)

Dans "Affichage 2D" vous pouvez activer/désactiver/modifier des options d'affichage pour la 2D cette fois
la première possibilité lance le générateur de silhouette et celle-ci est automatiquement affichée dans la partie 2D
l'option "Silhouette unicolore" affiche la silhouette d'une seule couleur (modifiable) si elle est désactivée alors chaque élément de la 2D est affiché avec la couleur de l'élément 3D correspondant

Dans le menu "Options" se trouve la fonction d'optimisation de la 3D qui consiste à relier les points qui sont confondus et qui peut rendre la 2D plus légère (tout comme la 3D)
Je vous conseille de générer une première fois la 2D puis d'optimiser la 3D et de régénérer encore une fois la 2D en regardant la différence
"Options" contient aussi la fonction (simple" qui va poser l'objet à 0 d'altitude

Les manipulations en 2D et 3D sont les mêmes :
clic gauche maintenu, déplacer la souris pour faire tourner l'objet
clic droit maintenu, déplacer la souris pour (dé)zoomer
clic avec le bouton du milieu, déplacer la souris pour déplacer la vue (en 3D elle ne se déplace pas
erticalement)

Pour terminer, lorsqu'un objet est chargé, une fenêtre apparait avec un "treeview" (un arbre façon windows explorer)
ce treeview contient le nom du fichier 3D chargé suivi de tous les éléments qui composent l'objet
le clic gauche sélectionne l'élément, un clic sur le nom du fichier sélectionne l'objet complet (selon les éléments actifs)
le clic droit (dés)active un élément, cliquer sur le nom de l'objet inverse l'état de chaque élément (les actifs se désactivent et vice versa), cliquer sur un élément inverse sont état 3D et 3D, cliquer sur le + pour voir l'état de la 2D et de la 3D séparément et un clic droit sur létat de la 2D ou de la 3D permet de le modifier indépendamment
la fonction "Afficher uniquement la sélection" de la 2D et de la 3D tiens compte de ces états et il faut que l'objet général (clic gauche sur le nom de fichier) soit sélectionné

j'espère que mes explications sont assez claires, bon courage pour la compréhension du code
une dernière chose : si vous supprimez le fichier .ini ou s'il n'y en a pas, le programme le recrée automatiquement quand vous quittez

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

shenron666
Messages postés
229
Date d'inscription
dimanche 14 septembre 2003
Statut
Membre
Dernière intervention
20 août 2014
-
il est possible de modifier le code comme bon vous semble
bon courage ;)
imenrahoui
Messages postés
1
Date d'inscription
mardi 15 janvier 2008
Statut
Membre
Dernière intervention
27 juin 2011
-
Bon travail, Bravo,
Est-il possible de modifier le code pour afficher un nuage de points, les vertex sont enregistrés dans un fichier csv ou txt.
Merci
shenron666
Messages postés
229
Date d'inscription
dimanche 14 septembre 2003
Statut
Membre
Dernière intervention
20 août 2014
-
Salut Shromilder, c'est vrai que ce vieux bout de code aurait bien besoin d'un rafraichissement pour mieux gérer les obj et les fichiers "non DOS" ^^
pour les face à plus de 3 vertex, le problème c'est de vérifier que les points sont bien coplanaires, ce qui est toujours le cas avec un triangle

par contre, pas certain de comprendre ce que tu veux dire par "même si ca vient de glm.c"
si tu pouvais me dire ce qu'est "glm.c" et où le trouver
le parser obj date de 2004 et est basé sur les specs wavefront trouvables sur www.wotsit.org (encore valable aujourd'hui)
Shromilder
Messages postés
32
Date d'inscription
samedi 16 avril 2005
Statut
Membre
Dernière intervention
13 février 2010
-
Bon deja on peut pas editer des commentaires c'est un peu embetant mais ca à rien à voir avec ton soft :)

Pour ton soft, en fait il y a un bug au niveau du chargement du fichier .mtl car si les fichiers obj et mtl ne se trouvent pas dans le répertoire du soft, lors du chargement du .mtl, vu que le lien qui est spécifié dans le fichier .obj est du style 'cercle.mtl', ton soft essaie de charger le fichier cercle.mtl dans le répertoire du logiciel au lieu d'aller dans celui du .obj.
De plus, le logiciel Maya génére des fichiers au format UNIX donc il n'y a pas de \r\n à la fin des lignes donc à prioris ca fait planter ton soft lors du parcours du fichier.
De plus, ton soft ne gère que les face à 3 vertex alors qu'on peut faire des face à plus que ca.
Je vais donc quand même me baser sur ca (même si ca vient de glm.c) pour parcer les .obj.
Merci :)
Shromilder
Messages postés
32
Date d'inscription
samedi 16 avril 2005
Statut
Membre
Dernière intervention
13 février 2010
-
bah moi mon fichier obj (maya 2010) fait planter ton soft =(
C'est domage je voulais utiliser tes sources pour mon soft mais je crois que je vais devoir me faire un parser de .obj tout seul =(
C'est surement du à ton commentaire "je n'ai pas prévu que le fichier ne contienne pas les normales -_-"

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.