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 :

Position caméra et taille des axes dans une fenêtre glsl


Sujet :

OpenGL

  1. #1
    Membre régulier
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2009
    Messages : 212
    Points : 93
    Points
    93
    Par défaut Position caméra et taille des axes dans une fenêtre glsl
    Bonjour,

    J'ai fait une application plutôt basique en GLSL et Qt et j'ai remarqué deux choses :
    - ma fenêtre initiale n'est pas centrée en 0,0,0 (le bas gauche de la fenêtre correspond au point -1,-1,0)
    - lorsque j'affiche les axes x et y (ligne de 0 à 1 sur chaque axe), je remarque qu'il ne sont pas du tout de la même taille. J'ai même l'impression qu'il sont proportionnel à la taille de la fenêtre définie (je vais peut être un peu trop loin ?)

    Je me demandais si ces deux points énoncés étaient normal ? A savoir, je ne touche pas à la matrice modelview et je n'ai que le code qui suit dans mon vertex shader

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gl_Position = vec4(vPositions, 1.0);//vPosition contient la position du vertex à afficher
    Merci par avance

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    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 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    - ma fenêtre initiale n'est pas centrée en 0,0,0 (le bas gauche de la fenêtre correspond au point -1,-1,0)
    Totalement normal dans la configuration par défault d'OpenGL. Cela peut être modifié par glViewport(), mais je ne me rappelle pas que cela affecte le pixel shader.

    - lorsque j'affiche les axes x et y (ligne de 0 à 1 sur chaque axe), je remarque qu'il ne sont pas du tout de la même taille. J'ai même l'impression qu'il sont proportionnel à la taille de la fenêtre définie (je vais peut être un peu trop loin ?)
    Oui, toujours normal. OpenGL, avec glViewport(), peux suivre le ratio de la fenêtre.

    Donc oui, tout à fait normal pour le moment
    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
    Homme Profil pro
    Collégien
    Inscrit en
    Avril 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Avril 2015
    Messages : 9
    Points : 12
    Points
    12
    Par défaut
    Bonjour,
    Concernant le deuxième point, la zone d'affichage OpenGL est au format NDC (normalized device coordinates), ce qui veux dire que quel que soit la taille de l'écran, l'axe x sera compris entre -1.0f et 1.0f, ainsi que l'axe y (système de coords. utilisé dans le shader).
    Par exemple, pour une résolution de 1024px par 1024px, il est normal que l'axe X et Y dessinés seront de la même taille, mais si tu dessines sur une fenêtre de 800x600, l'axe X dessiné sur -1.0f,1.0f sera plus grand (800pixels) que l'axe Y dessiné lui aussi sur -1.0f,1.0f (600pixels).
    Pour le premier point, c'est normal avec la configuration par défaut d'opengl, le point central de ton écran représente les coordonnées 0,0
    Pour que ton axe X et ton axe Y restent proportionnels et qu'ils puissent évoluer dans un autre système de coordonnées que (-1.0f,1.0f) , il faut combiner des matrices (Model View Projection, dans le shader via une UniformLocation) ainsi que glViewport. La bibliothèque "glm" permet de faciliter l'utilisation des matrices, elle peut se trouver ici: http://glm.g-truc.net/0.9.6/index.html

    Une bonne ressource sur le sujet: http://jeux.developpez.com/tutoriels...el-3-matrices/


    Edit: pas assez rapide, désolé pour la double réponse...

  4. #4
    Membre régulier
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2009
    Messages : 212
    Points : 93
    Points
    93
    Par défaut
    Bonjour,

    Merci pour vos réponses, je suis rassurée

    J'ai juste une autre interrogation qui me vient pour le coup, j'ai mis la taille de ma fenêtre égale à la résolution de mon écran (chose facile à faire en qt). Or mes axes x et y me semblent corrects au point -1 (-1;-1 est bien mon coin bas gauche de ma fenêtre), par contre le reste ne suit pas ma fenêtre et donc ma résolution d'écran. J'entends par là que mon coin supérieur droit, que je pensais à 1;1, ne l'ai pas, ça doit être quelque chose du genre 1.5;1.5. J'ai donc ma fenêtre défini (en théorie) sur du [-1;1.5] sur chaque axe. Toujours normal ?

    Je mets une capture d'écran de ma fenêtre avec mes axes pour illustrer, je peux comprendre que mes propos ne soient pas des plus clairs.

    Merci encore
    Images attachées Images attachées  

  5. #5
    Membre à l'essai
    Homme Profil pro
    Collégien
    Inscrit en
    Avril 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Avril 2015
    Messages : 9
    Points : 12
    Points
    12
    Par défaut
    Bonjour, si tu utilises les QGLWidgets avec Qt, il est fort probable que tu aies dû les subclasser, et ré-implémenter la méthode "resizeGL". Dans cette méthode, tu dois redimensionner l'aspect de la surface OpenGL avec glViewport(), comme indiqué par LittleWhite plus haut, en fonction du ratio de ta fenêtre, car Qt il me semble crée une surface OpenGL avec un ratio 1:1.
    Cependant, après lecture de la doc Qt, il semblerait que cette classe soit dépréciée, au profit de QOpenGLWidget, auquel cas la méthode ne semble pas très différente, mais je n'ai jamais essayé, donc je peux me tromper.
    J'ai commencé OpenGL avec Qt, mais n'ayant pas trouvé toutes les options voulues (switch Core/Compatibility Profile, OpenGL 4.4, initialisation du contexte OpenGL moins paramètrable...), il m'a semblé préférable d'utiliser une bibliothèque tierce (FreeGlut, GLFW).

    Cordialement

  6. #6
    Membre régulier
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2009
    Messages : 212
    Points : 93
    Points
    93
    Par défaut
    Bonjour,

    Je suis dans l'obligation d'utiliser Qt, spécifications obligent ...

    Je n'utilise pas vraiment une des ces classes, mais une s'appelant OpenGLWindows (donné dans une exemple Qt) qui hérite de QWindows et QOpenGLFunctions, mais on reste sur le même principe. Je retrouve bien ma méthode resizeGL, que j'utilise. Par contre, j'ai essayé de ne pas utiliser resizeGL en espérant que la fenêtre initiale correspondent à mon contexte OGL (au niveau des tailles), et ce n'est même pas le cas. Du coup, je vais regarder de plus près la doc et le code des classes Qt pour voir le pourquoi.
    Pour le moment, je vais utiliser glViewport(), en espérant que ce "problème" soit récurent d'un pc à l'autre. Si vous avez un peu plus d'explications à ce sujet, je suis toujours preneuse Je reviens dès que j'en sais plus (ça peut prendre quelques temps).

    Merci encore, j'ai déjà eu pas mal de réponses, bien expliquée d'ailleurs

  7. #7
    Membre à l'essai
    Homme Profil pro
    Collégien
    Inscrit en
    Avril 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Avril 2015
    Messages : 9
    Points : 12
    Points
    12
    Par défaut
    Bonjour, pourrait on savoir quelles sont ces spécifications? Car si c'est juste l'utilisation de l'IDE Qt, les autres gestionnaires de fenêtres peuvent être utilisés (FreeGLUT, GLFW). De même, si ces specs. précisent seulement une utilisation du programme multi plateforme, les bibliothèques citées précédemment peuvent remplacer Qt.

    La méthode resizeGL devrait à mon sens être utilisée, car lors d'un redimensionnement de la fenêtre (si cela est permis par l'application) et peut être même d'un changement de résolution, le viewPort devrait être recalculé, pour éviter les soucis de ratio énoncés plus haut.

  8. #8
    Membre régulier
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2009
    Messages : 212
    Points : 93
    Points
    93
    Par défaut
    On me demande d'utiliser la classe cité plus haut, d'autre partie de l'application l'utilise. J'en ai parlé avec d'autre dev qui ont directement utilise la méthode glviewport, sans jamais aller voir plus loin. Je vais donc procéder ainsi pour le moment, tout en gardant ce point à l'esprit et en cherchant une réponse un peu plus tard.
    Pour le resizeGL, je l'utilise bien, j'étais juste curieuse de voir ce que j'obtenais.
    Merci en tout cas

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

Discussions similaires

  1. [Spark] Taille des boutons dans une barre de navigation
    Par yvancoyaud dans le forum Flex
    Réponses: 0
    Dernier message: 09/12/2011, 01h26
  2. [AC-2002] Récupérer taille des fichiers dans une table
    Par Jean-Luc80 dans le forum VBA Access
    Réponses: 3
    Dernier message: 22/11/2011, 11h22
  3. Taille des caractères dans une ListView
    Par LordDaedalus dans le forum Composants graphiques
    Réponses: 1
    Dernier message: 14/03/2011, 14h36
  4. GUI Affichage des axes dans une fenêtre de type 'axes'
    Par Matersss dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 09/03/2011, 12h52
  5. tailles des données dans une liste deroulante
    Par air75 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 11
    Dernier message: 25/11/2009, 14h09

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