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 :

Qt et resizeGL donne déformation


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 61
    Par défaut Qt et resizeGL donne déformation
    Bonjour,

    Je suis en train de développer un programme avec une interface faite avec Qt. Cette interface contient deux QDockWidget (un à gauche et l'autre à droite) et au centre se trouve un zone de rendu OpenGL. Cette zone de rendu est géré par un objet héritant de QGLWidget et qui redéfinit notamment la fonction resizeGL.

    Mon problème est que j'ai un souci de déformation si je me sers des valeurs width et height telles quelles fournies en argument par resizeGL pour définir le viewport.

    ma fonction resizeGL est ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    glViewport(0, 0, (GLint)largeur, (GLint)hauteur);
     
    m_camera->resize(largeur, hauteur);
    Avec ce code, un carré devient un rectangle :



    pour que mon carré reste un carré, il faut que je fasse ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glViewport(0, 0, (GLint)largeur - 100, (GLint)hauteur);
    j'ai ainsi le résultat souhaité, sauf que je perds une partie de ma zone de rendu (forcement, une bande à droite de 100 vu que c'est moi qui lui demande) :


    Je ne comprends pas pourquoi cette déformation a lieu et à part cette solution bancale je n'ai pas réussi à trouver mieux. Si vous avez des idées...

    Je précise que la fonction resize de la camera se charge de calculer la matrice projection, mais à priori le problème ne vient pas de là car j'ai remplacé mes calculs par un appel à gluperspective sans que ça change rien.

  2. #2
    Membre éclairé Avatar de AuraHxC
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 652
    Par défaut
    Si tu as une largeur et une hauteur différente, logiquement cela déforme ton objet. il me semble que pour cela il faut faire des tests pour prendre le plus petit entre la largeur et la longueur et faire une viewport "carré" de la taille du plus petit entre largeur et longueur.

    Dans le genre là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int side = qMin(width, height);
    glViewport((width - side) / 2, (height - side) / 2, side, side);

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 61
    Par défaut
    ben on peut bien avoir un espace de rendu OpenGL qui ne soit pas carré ?! C'est ce que je voudrais justement : que mon affichage avec OpenGL remplisse tout le widget central, soit toute la fenêtre moins l'espace occupé par les deux docks latéraux.

    Ta solution AuraHxC fonctionne, il n'y a effectivement plus de déformation, mais je perds une petite bande verticale de chaque côté de mon affichage.

  4. #4
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 61
    Par défaut
    Je viens de trouver et j'ai honte. Le problème venait en fait du passage de width et height à la caméra pour la construction de la matrice projection. Je passais des int et je faisais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (float)(width / height)
    pour calculer le ratio au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (float)largeur / (float)hauteur
    ...

  5. #5
    Membre éclairé Avatar de AuraHxC
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 652
    Par défaut
    Hmmm d'accord, je vois !!!
    C'est des erreurs qui sont pénibles et qui te font perdre du temps

    En tout cas content que cela fonctionne

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

Discussions similaires

  1. [Concept] Stabilité d'une base de donnée
    Par lassmust dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 03/07/2002, 16h16
  2. compression de données du point de vue algorithmique
    Par GoldenEye dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 26/06/2002, 15h51
  3. [Comparatifs] Limites nombres tables et quantité de données
    Par benj63 dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 13/06/2002, 21h31
  4. [Kylix] Sauvegarde de donnée utilisateur....
    Par Eclypse dans le forum EDI
    Réponses: 1
    Dernier message: 11/05/2002, 17h21
  5. Comparer des fichiers de données : Quel Langage ?
    Par Anonymous dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 24/04/2002, 22h37

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