IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

format obj vers opengl


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut format obj vers opengl
    Bonjour tout le monde,

    Actuellement je fais un petit programme Qt qui convertit le format connu OBJ vers du code OpenGL et fournit le résultat dans un fichier texte (le programme fini, je fournirai l'exe Windows ainsi que le source).
    Pour l'instant j'ai réussi à :

    => convertir les vertices (vertex) en utilisant la fonction glVertex3d()
    => convertir les normales en passant par glNormal3d()

    Mais il me reste à comprendre comment fonctionne les faces en OpenGL : surtout quelle fonction correspond à :
    en format OBJ : ici ces faces sont composées des sommets 1,2,3 et 4 en format OBJ. Ici l'objet est un simple cube, mais la syntaxe de f peut s'écrire de manière plus complexe avec des slashs "/" : on peut- ainsi y inclure les normales entre autres.

    Je sais qu'il y a une fonction OpenGL qui dessine les faces, mais laquelle ? Comment s'utilise-t-elle ?

    Merci de m'apporter vos lumières là-dessus.

    Bonne journée à vous. Cordialement, Gizmo.

  2. #2
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 618
    Par défaut
    Salut,

    glVertex et glNormal sont deprecated et datent de la pré-histoire. Bien qu'elle fonctionnent encore sur la pluspart des cartes (et qu'elles soit très pratiques pour du test rapide ), ce n'est pas une bonne idée de s'en servir. Il va falloir que tu regardes du coté des vertex buffer object (VBO pour les intimes). Il y a de nombreux tuto sur le net là dessu.

    Cependant, OpenGL ne sait dessiner que des triangles. Il n'y a pas de fonctions pour dessiner directement un polygone (enfin, il y en a, mais elles ne font que tranformer bovinement ton polygone en triangles de manière peu optimal et ne marchent bien que pour des polygone convexes).
    Le plus simple est de te limiter dans un premier temps à des .obj ne contenant que des triangles. Plus tard tu pourra utiliser un algo de tesselation pour transformer tes polygone en triangles.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Justement je cherche pas à faire un jeu qui demande des cartes graphiques dernier cri.

  4. #4
    Expert confirmé
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 226
    Par défaut
    en format OBJ : ici ces faces sont composées des sommets 1,2,3 et 4 en format OBJ. Ici l'objet est un simple cube, mais la syntaxe de f peut s'écrire de manière plus complexe avec des slashs "/" : on peut- ainsi y inclure les normales entre autres.
    T'aurais pu rechercher sur le net...

    f V1/T1/N1 V2/T2/N2 V3/T3/N3 V4/T4/N4
    Les V1, V2, V3, V4 sont les numéros des positions ; les T1, T2, T3, T4 sont les numéros des coordonnées de texture ; et les N1, N2, N3, N4 sont les numéros des normales.
    f v1 v2 v3...
    Face.
    Il doit y avoir au moins 3 points.
    f v1//vn1 v2//vn2 v3//vn3...
    Une face avec un vecteur normal associé à chaque sommet.
    http://fr.wikipedia.org/wiki/Objet_3D_(format_de_fichier)
    http://jmath3d.aspirine.org/doc/obj.html

    Après il suffit juste de mettre GL_QUAD ou GL_TRIANGLES

  5. #5
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 618
    Par défaut
    Dans ce cas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    glBegin(GL_TRIANGLES);
    glVertex(...);
    glVertex(...);
    glVertex(...);
    glEnd();
    Te dessine un triangle. Remplace GL_TRIANGLES par GL_QUADS pour des quads et GL_POLYGON pour des polygones (mais ne marche qu'avec des polygones convexes).
    Cf la vieille doc d'OpenGL pour plus d'info sur glBegin().

    Mais je le répète pour ceux qui tomberaient ici par hazard, ce n'est plus la bonne méthode de dessiner des primitives en OpenGL.

  6. #6
    Invité
    Invité(e)
    Par défaut
    oui justement j'allais t'en parler.
    Le code que tu viens de marquer : quelle différence avec les vertex array ?
    Le programme tournera plus vite s'il va chercher des données continue dans la RAM ? Plutôt que d'aller d'un côté et de l'autre de la RAM ?

  7. #7
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 818
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 818
    Par défaut
    Citation Envoyé par pyros Voir le message
    Mais je le répète pour ceux qui tomberaient ici par hazard, ce n'est plus la bonne méthode de dessiner des primitives en OpenGL.
    A replacer dans son contexte bien évidemment... comme dit par gizmo27, quand on a une vieille trapanelle avec une carte qui a dix ans, on peut encore se permettre d'utiliser les fonctions maintenant dépréciées (d'ailleurs j'en utilise tout plein dans mes tutos jogl pas encore parus )

    Mais +1 avec toi pour ceux qui veulent se lancer dans de la prog OpenGL et y rester, là par contre, il vaut mieux éviter.
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  8. #8
    Invité
    Invité(e)
    Par défaut
    Je pense que je vais utiliser des vertex array : des sommets stockés de manière contigue dans un tableau valent vieux que des sommets éparpillés un peu partout dans la RAM... Et puis pour une carte graphique intégrée à la carte mère je pense que c'est mieux.

    Bah je verrai ça pour l'instant je suis en train de regarder le fonctionnement des textures.

Discussions similaires

  1. [Shell] Convertir format DOS vers Unix
    Par Neuromancien2 dans le forum Linux
    Réponses: 1
    Dernier message: 08/02/2008, 18h07
  2. format texte vers date
    Par VBBBA dans le forum Macros et VBA Excel
    Réponses: 28
    Dernier message: 18/11/2007, 16h59
  3. Charger un objet .obj en OpenGl
    Par chm0105 dans le forum OpenGL
    Réponses: 1
    Dernier message: 09/08/2007, 17h19
  4. [Dates] Convertir format anglophone vers francophone
    Par mickado dans le forum Langage
    Réponses: 2
    Dernier message: 22/07/2007, 19h00
  5. passage de format texte vers nombre
    Par VBBBA dans le forum Macros et VBA Excel
    Réponses: 25
    Dernier message: 07/06/2007, 16h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo