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 :

1 scene et plusieurs camera


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 266
    Par défaut 1 scene et plusieurs camera
    Bonjour,

    je suis débutante avec OpenGL, et requière votre aide pour mon problème.

    Je suis actuellement en train de développer un logiciel de CAO, et je souhaiterai pouvoir, à l'instar de 3DS max pour ceux qui connaissent, pouvoir observer ma scène, selon plusieurs angles possibles. Je m'explique :- je souhaiterais avoir 4 fenêtres montrant tous la même scène, mais avec des "Caméras" différentes disposés dans ma scène.

    J'ai pu voir un tutoriel de nehe sur le sujet, mais il semblerait que sa technique ne soit fonctionnel que si les 4 champs sont dans la même zone openGL .

    Est-il possible de faire ce que je souhaite c'est à dire que ma scène possède 4 caméras et que chaque caméra soient affichées dans des fenêtres différentes? Si oui comment. Jusqu'à présent je n'ai jamais réussi à bien comprendre comment avoir plusieurs zones OpenGL dans une même fenêtre sans avoir de problème de contexte. Je débute

    Pour info je travail sur QT, et ma zone d'affichage hérite de QGLWidget.

    Comme je débute j'en profite pour vous poser la question. Quelle est la meilleur façon d'organiser son code lorsqu'on utilise OpenGL ?
    Actuellement j'ai une classe <zone affichage> héritant de QGLWidget, qui affiche l'ensemble de mes objets, et qui possède une instance de ma classe camera. Mais j'ai lu sur un forum que la camera devais être gérer par la vue. Du coup je ne sais pas trop si ma façon de faire est la mieux, et je me tourne donc vers vous pour m'aider à progresser et améliorer mon code.

    Merci d'avance pour vos réponses.

  2. #2
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 034
    Billets dans le blog
    12
    Par défaut
    Salut!

    Tu as 3 méthodes pour implémenter ce que tu cherches à faire:
    - Avoir une fenêtre qui va afficher tes 4 viewports
    - Avoir 4 fenêtres qui vont afficher leur propre viewport, via le même contexte OpenGL.
    - Avoir 4 fenêtres qui vont afficher leur propre viewport, via leur propre contexte OpenGL.

    Pour avoir une utilisation proche d'un 3DSMax, avec redimensionnement des fenêtres, les 2ème et 3ème méthodes sont les plus adaptées.
    Je vais donc te les décrire d'un point de vue OpenGL 3.x, mais il faudra très probablement l'adapter à Qt, car ça se base sur les contextes OpenGL et les formats de pixel de la fenêtre, et que je ne sais pas comment Qt se débrouille avec ça.

    Méthode 2:
    Il faut créer un contexte OpenGL et ce contexte est normalement utilisable par toutes les fenêtres dont le format de pixels est compatible avec celui utilisé pour initialiser ce contexte.
    Ensuite il suffit juste d'activer le contexte OpenGL avec la fenêtre qui va l'utiliser.

    Méthode 3:
    Il faut créer un premier contexte OpenGL (pour la première fenêtre par exemple) qui sera considéré comme contexte principal.
    Ensuite il faut créer les 3 autres contextes (pour les 3 autres fenêtres), qui partageront leurs ressources avec le contexte principal, via wglCreateContextAttribs/glxCreateContextAttribs.
    Une fois que c'est fait, lors du rendu dans une fenêtre, on active son contexte et on dessine dedans.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  3. #3
    Membre éclairé
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 266
    Par défaut
    tout d'abord merci d'avoir répondu.

    Alors comme je disais je suis débutante, donc il va falloir être patient avec moi :p .
    Si je comprend bien et si je prend ta solution numéro 2 (ce qui me parait être le plus logique) comment faut-il faire exactement? je t’avoue que j'ai un peu de mal à bien visualisé comment faire.

    Je dois faire une classe scène qui contient mon affichage avec mes vbo etc... et une classe héritant de QGLWidget partageant le même contexte et pointant vers ma scene , contenant chacune une caméra. ces classes se contentant de faire des glulookat et glViewport? es ce ça? ou j'ai vraiment mal compris le principe?

  4. #4
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 034
    Billets dans le blog
    12
    Par défaut
    Comme je te l'ai dit, je te l'ai décrit en OpenGL, et je n'ai aucune expérience en Qt.
    Par contre, de ce que je vois dans leur documentation, je ne suis pas sur que tu puisses implémenter la seconde méthode.

    En revanche, la troisième est faisable, si tu gères toi-même ton contexte, et la documentation de la classe QOpenGLContext montre qu'elle a bien ce qu'il faut pour: setShareContext.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  5. #5
    Membre éclairé
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 266
    Par défaut
    ok je te remercie je vais regarder ça.

Discussions similaires

  1. Rendre une scene en plusieurs parties ?
    Par supergrey dans le forum DirectX
    Réponses: 2
    Dernier message: 04/08/2008, 08h35
  2. scene de plusieurs gigaOctects
    Par Asmod_D dans le forum Moteurs 3D
    Réponses: 2
    Dernier message: 05/04/2008, 16h15
  3. plusieurs cameras dans une scene
    Par franc82 dans le forum OpenGL
    Réponses: 5
    Dernier message: 25/11/2006, 00h50

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