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 :

Affichage décalé (scene coupée en deux)


Sujet :

OpenGL

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 396
    Points : 230
    Points
    230
    Par défaut Affichage décalé (scene coupée en deux)
    Bonjour.

    J'ai une scène 3D en OpenGL et quand je me déplace de gauche à droite, j'ai ma scène qui se coupe en 2 toujours précisement au même endroit sur mon écran (environ au 2/3). Voici une image photoshopé très similaire de ce que je vois (pas possible de faire un screenshot d'une application OpenGL) http://www.hapshack.com/?v=qKHJ.png

    J'ai aussi essayé d'enregistrer une vidéo pour vous montrer et là ça devient étrange. Quand je regarde la vidéo en boucle, je vois soit:
    - Aucune coupure de ma scène
    - Une coupure en 2 de ma scène mais pas forcément au 2/3 de l'écran.
    Quand je poste cette vidéo sur youtube: je vois la coupure mais uniquement quand je regarde la vidéo en plein écran et elle ne se trouve pas à un endroit précis contrairement à ce que je peux voir dans mon application:


    Info: j'arrive à afficher ma scène à environ 500fps quand je désactive la synchro verticale (donc pas de problème de performance). Pour les différents tests, la synchro verticale est toujours activée.

    D'où peut venir ce problème ?
    Merci d'avance.

  2. #2
    Expert éminent sénior

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

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 045
    Points : 11 368
    Points
    11 368
    Billets dans le blog
    10
    Par défaut
    Donc ta scène est coupée, même avec la synchro verticale activée?
    Quel est ton code pour l'activer?
    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 actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 396
    Points : 230
    Points
    230
    Par défaut
    Oui j'ai le problème quand la synchro verticale est activé (et aussi quand elle ne l'est pas).

    * Quand j'utilise la bibliothèque SFML, je le fais via la méthode: sf::RenderWindow#setVerticalSyncEnabled(true). Je tombe bien de 500fps à 60fps mais j'ai encore ma scène coupé en deux.
    * Quand j'utilise WxWdiget, j'active la synchro vertical via le panneau de configuration NVidia (nvidia-settings sur Ubuntu). Idem: je suis bien à 60fps mais j'ai toujorus le problème d'affichage.

  4. #4
    Expert éminent sénior

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

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 045
    Points : 11 368
    Points
    11 368
    Billets dans le blog
    10
    Par défaut
    As-tu essayé via la fonction OpenGL swap interval, pour tester?
    https://www.opengl.org/wiki/Swap_Interval
    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 actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 396
    Points : 230
    Points
    230
    Par défaut
    Je viens d'essayer SwapInterval et la synchro verticale semble bien activé (60 fps) mais j'ai toujours le même problème.

    Sur wikipedia (https://en.wikipedia.org/wiki/Screen_tearing), je peux lire ceci qui semble bien décrire mon problème: "It can also occur simply from lack of sync between two equal frame rates, in which case the tear line is at a fixed location that corresponds to the phase difference".
    J'ai du mal à comprendre cette partie dans la phrase: "lack of sync between two equal frame rates". Que faut-il comprendre par "manque de synchronization" et "deux frame rates égaux" ?

  6. #6
    Membre actif Avatar de monwarez
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 144
    Points : 293
    Points
    293
    Par défaut
    Es-ce que vous utilisez plusieurs carte graphiques pour effectuer le rendu ?(comme SLI chez nvidia et crossfire chez amd). Il semblerait que ce soit le cas d'après l'article sur wikipédia.
    De
    lack of sync between two equal frame rates
    Comme il est mentionné sur wikipédia, si les différents GPU ne calculent pas à la même vitesse une même image, on peut avoir du tearing (si les GPU ne sont pas synchronisé entre-eux je suppose).

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 396
    Points : 230
    Points
    230
    Par défaut
    Je n'ai qu'une seule carte graphique: donc le problème ne peut pas venir de là.
    Je suis à court d'idée pour trouver la source du problème

  8. #8
    Membre actif Avatar de monwarez
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 144
    Points : 293
    Points
    293
    Par défaut
    Avez vous essayez de tester votre programme sur une autre machine ? Sans le code source ou un extrait de ce dernier, je ne vois pas comment vous aider plus. Peut être devriez vous tester votre programme avec des débogueur OpenGL et mettre les résultat sur le forum ? (voir http://jeux.developpez.com/telecharg.../Outils-OpenGL)
    Et aussi quelle version d'OpenGL utilisez vous, core profile ou compatibility profile (selon la version) et quelle version des shaders est utilisée ? Enfin quelle carte graphique utilisez vous (nom complet) ?

  9. #9
    Membre éprouvé Avatar de maeiky
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2013
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Juin 2013
    Messages : 201
    Points : 976
    Points
    976
    Par défaut
    C'est un problème de double buffering, comme quoi tu fais ton rendu directement dans le buffer principal. Normalement on rend dans un second buffer, puis on swap celui-ci avec le principal, ce qui prend une fraction de seconde. Ça doit ce faire au moment du VBlank, d'où la phrase "lack of sync between two equal frame rates". Je ne connais pas ton implémentation, mais ça ne devrait qu'être qu'une option à activer lors de la création du contexte OGL.

    La synchro verticale n'a pas de lien direct et la plupart du temps elle foire son coup. Même activé, il y a du tearing, c'est à dire que les frames ne suivent pas exactement la cadence du refresh rate de ton écran. Contrairement à ton problème, le tearing est la non fluidité de l'animation (comme de petit lags). Par exemple, il peut y avoir 2 frames générer pour un affichage à l'écran, et certain sont afficher 2 fois. Ce qu'elle fais, tout dépendamment de ton drivers, c'est un vulgaire pooling sur le VBlank, qui la plupart du temps consomme tout le CPU ... pour rien (dans le cas d'un frame qui n'aurait pas pris tout le processeur à générer en 16ms).
    Linx, un nouveau langage intuitif
    Simacode IDE, auto-complétion & compilation instantané
    GZE, moteur 2d/3d multi-langage/multi-plateforme

Discussions similaires

  1. Affichage décalé lors du 1er chargement
    Par GarGamel55 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 25/01/2008, 21h34
  2. Affichage décalé dans un état
    Par Nessie37 dans le forum IHM
    Réponses: 1
    Dernier message: 04/12/2007, 14h03
  3. probleme d'affichage de scene
    Par franc82 dans le forum OpenGL
    Réponses: 5
    Dernier message: 20/11/2006, 13h15
  4. [débutant] affichage décalé
    Par sergoid dans le forum Access
    Réponses: 4
    Dernier message: 09/08/2006, 11h16
  5. Réponses: 9
    Dernier message: 21/05/2005, 14h32

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