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 :

Conception d'une classe contenant une collection de sommets [OpenGL 1.x]


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 145
    Par défaut Conception d'une classe contenant une collection de sommets
    Bonsoir !

    Je rencontre un problème pour un projet qui n'a pour but que d'afficher des objets dans l'espace 3D. L'appli est développée en C++/Qt 5.1/OpenGL 1.1.

    J'aimerais laisser une base saine à ceux qui le reprendront.

    C'est pourquoi j'essaie d'utiliser glVertexPointer, glDrawElements, et les tableaux d'indices, pour éviter que plusieurs sommets partagent la même position.

    Admettons que j'aie une classe CGeometry, qui stocke les objets représentant des sommets dans un std::vector.

    Que choisir ? Des float, pour avoir un tableau utilisable avec glDrawElements ? Problème : les sommets sont donc stockés sur 3 indices (du tableau), et si je souhaite enregistrer les sommets de l'objet dans un fichier, ou simplement afficher la liste des sommets dans le programme, ce n'est pas pratique du tout.

    L'idéal serait d'utiliser QVector3D (classe permettant de représenter un sommet/vecteur dans l'espace), mais il faudrait, à partir de ces objets, créer un tableau de float à la volée à passer à glDrawElements, et cela ralentit considérablement le programme.

    Que me proposeriez-vous ?

    Merci à tous

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 157
    Billets dans le blog
    152
    Par défaut
    Bonjour,

    Je me demande pourquoi vous vous limitez à OpenGL 1, alors que vous faites du Qt 5, mais passons.

    Avec le std::vector contenant une structure :
    Vous pouvez tricher.
    En effet, std::vector utilise en interne un simple tableau linéaire. Pour y avoir accès, vous pouvez faire :
    Et là, vous avez un pointeur sur un float, au début du tableau et vous pouvez le passer directement à OpenGL.
    C'est certes un peu bourrin, mais ça marche.
    Je pense que cela est applicable aux QVector3D
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 145
    Par défaut
    En effet, ça marche, en utilisant QVector3D, merci !

    Pourquoi nous nous limitons à OpenGL 1, c'est simple --> contrainte de notre commanditaire (projet tutoré)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. creer une DLL contenant une classe
    Par joks93440 dans le forum C++
    Réponses: 6
    Dernier message: 20/12/2013, 17h31
  2. Eval d'une propriété d'une classe dans une classe
    Par bizet dans le forum ASP.NET
    Réponses: 4
    Dernier message: 28/10/2008, 09h43
  3. Réponses: 1
    Dernier message: 18/04/2006, 12h24
  4. Réponses: 2
    Dernier message: 31/08/2005, 16h12
  5. Réponses: 4
    Dernier message: 17/03/2004, 17h24

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