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

Qt Discussion :

Limite sur QGLWidget


Sujet :

Qt

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2009
    Messages : 22
    Points : 17
    Points
    17
    Par défaut Limite sur QGLWidget
    Bonjour,

    Je suis en train de créer une appli qui va comporter deux QGLWidget pour la prévisualisation et un autre pour le rendu.

    J'ai une classe myQGLWidget :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    class myQGLWidget : public QGLWidget
    {
        Q_OBJECT
    public:
        explicit myQGLWidget(int framesPerSecond = 0, QWidget *parent = 0/*, char *name = 0*/);
        virtual void initializeGL() = 0;
        virtual void resizeGL(int width, int height) = 0;
        virtual void paintGL() = 0;
        virtual void keyPressEvent( QKeyEvent *keyEvent );
     
    public slots:
        virtual void timeOutSlot();
     
    private:
        QTimer *t_Timer;
    };
    Dont hérite CAffichage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    class CAffichage : public myQGLWidget
    {
    	Q_OBJECT
    public:
    	explicit CAffichage(QWidget *parent = 0);
    	void initializeGL();
    	void resizeGL(int width, int height);
    	void paintGL();
     
    	void mousePressEvent(QMouseEvent *event);
    	void mouseMoveEvent(QMouseEvent *event);
    	void mouseDoubleClickEvent(QMouseEvent *event);
     
    	void add_object(CMesh * obj);
    	void remove_object(CMesh * obj);
     
    private:
    	GLfloat rotationX;
    	GLfloat rotationY;
    	GLfloat rotationZ;
    	QPoint  lastPos;
    	GLfloat eloign;
     
    	std::vector<CMesh*> objets;
    };
    Je créé donc 3 widgets CAffichage, or s'il y en a 3 différents, le troisième n'affiche pas l'origine (dessin par défaut dans paintGL()).

    Y a-t-il une limitation sur le nombre de QGLWidget affichables?

    Merci!

    Inouee

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 873
    Points : 219 217
    Points
    219 217
    Billets dans le blog
    122
    Par défaut
    Bonjour,

    Il me semble avoir lu dans la documentation, qu'il était difficile d'avoir des fenêtres OpenGL proche (dans le sens, deux fenêtre OpenGL dont l'une est parente de l'autre ... ou je ne sais trop quoi).
    Mais je ne retrouve plus trop ce passage là, dans la documentation.
    Peut être devriez vous essayer d'avoir plusieurs QGLContext partagé.
    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 à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2009
    Messages : 22
    Points : 17
    Points
    17
    Par défaut
    Bonjour,

    J'avais effectivement essayé de créer un QGLContext pour chaque QGLWidget:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    class myQGLWidget : public QGLWidget
    {
        Q_OBJECT
    public:
        explicit myQGLWidget(int framesPerSecond = 0, QGLContext* context = 0, QWidget *parent = 0);
        virtual void initializeGL() = 0;
        virtual void resizeGL(int width, int height) = 0;
        virtual void paintGL() = 0;
        virtual void keyPressEvent( QKeyEvent *keyEvent );
     
    public slots:
        virtual void timeOutSlot();
     
    private:
        QTimer *t_Timer;
    };
    avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    myQGLWidget::myQGLWidget(int framesPerSecond, QGLContext *context, QWidget *parent)
        : QGLWidget(context, parent)
    {
    ...
    }
    et du côté de CAffichage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CAffichage::CAffichage(QWidget *parent)
    	: myQGLWidget(60, new QGLContext(GLFormat()), parent)
    {
    	...
    }
    Sans changements sur le résultat (ne considérant que ma déclaration du QGLContext soit correcte).

    Pour ce qui est du "parentage", mon interface est comme suit:


    J'ai donc un HBoxLayout quand lequel j'ai 2 QWidget avec un QSplitter au milieu.
    Celui de droite devient un CAffichage, celui de gauche est organisé avec un VBoxLayout avec 2 QWidget et un QSplitter au milieu, dont les 2 QWidget deviennent des CAffichage. (quand je dis deviennent, ils le sont au début mais c'est pour schématiser la création).

    Tout ça pour dire qu'il ne sont pas directements parents car organisés dans des layouts spécifiques.
    Je vais essayer de chercher ce passage dans la doc mais si quelqu'un a une idée sur mon problème je suis tout ouïe .

    Merci!

    Inouee

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 873
    Points : 219 217
    Points
    219 217
    Billets dans le blog
    122
    Par défaut
    Qu'est ce qui change (les différences) entre les QGLWidget de gauche et celui de droit (ou les CAffichage).
    Aussi, ne serais pas tout simplement un problème avec OpenGL (et pas Qt, ni rien).
    Dans le sens, si vous désactivez les widgets de gauche, celui de droit affichera t-il quelque chose ?
    Que doit afficher celui de droite ?
    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.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2009
    Messages : 22
    Points : 17
    Points
    17
    Par défaut
    Bonjour,

    Rien ne change entre les QGLWidget de gauche et celui de droite, ils sont pour l'instant vides donc ils devraient afficher la même chose c'est à dire 3 GL_LINE représentant le repère.

    Si je désactive un widget en bas à gauche par exemple en le laissant en QWidget, celui d'en haut a gauche et celui de droite vont bien afficher le repère.
    Ce qui est bizarre c'est que j'ai bien le "fond" d'OpenGL mais rien n'est dessiné dedans. On dirait que le premier créé ne marche plus si on en créé deux autres par la suite.
    Le problème est récurrent sur plusieurs PC, et j'ai déjà créé des programmes (avec GLUT) avec plus de 3 fenêtres OpenGL sans problèmes.

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 873
    Points : 219 217
    Points
    219 217
    Billets dans le blog
    122
    Par défaut
    Alors on ne peux pas avoir plus de 2 contexte à la fois... Enfin j'ose croire.
    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.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2009
    Messages : 22
    Points : 17
    Points
    17
    Par défaut


    Cela me paraît quand même très réducteur et ce qui me perturbe le plus c'est que le QGLWidget de droite est bien activé, on passe bien dans sa fonction paintGL() mais rien n'est dessiné..

    Si je trouve pas la solution, adieu la prévisualisation des deux maillages pour le morphing lol

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 873
    Points : 219 217
    Points
    219 217
    Billets dans le blog
    122
    Par défaut
    Les appels à paintGL sont effectués par Qt.
    Maintenant, il faut que vous cherchiez s'il n'y a pas des erreurs reporter (glError / ou autre fonction de Qt qui retournerai des messages d'erreur / code d'erreur).
    Il faut aussi vérifié si le contexte dans chaque fenêtre est valide.
    Pour moi, on ne pouvait avoir qu'un contexte OpenGL par fenêtre :p
    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.

Discussions similaires

  1. simulation limit sur SQL server
    Par anatole44 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 08/10/2007, 16h20
  2. [Upload] Upload limité sur hebergeur
    Par djedie dans le forum Langage
    Réponses: 8
    Dernier message: 12/11/2006, 02h49
  3. LIMIT sur MSSQL
    Par dieudo dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 07/02/2006, 18h44

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