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 :

Associer un fragment shader à tout l'écran


Sujet :

OpenGL

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Associer un fragment shader à tout l'écran
    Bonjour,


    Débutant en OpenGL (et en C++, SDL, OpenCV et programmation Windows au passage), je suis en train d'écrire un petit logiciel en OpenGL.

    J'ai deux webcams, je traite leur signal respectifs par OpenCV, je les transforme en texture OpenGL, textures que je plaque sur deux plans dans l'espace. Cette partie là est faite et fonctionne comme je le souhaite.

    Maintenant, je souhaiterais envoyer ces deux images dans mon casque de réalité virtuelle (un oculus rift)
    Ce casque a besoin d'une certaine déformation de l'écran pour compenser l'effet de distortion des lentilles.

    J'aurais donc besoin de savoir comment appliquer un fragment shader à l'ensemble de l'écran (framebuffer ?).
    Je dispose du code source du fragment shader fourni par le SDK de l'Oculus.

    J'ai suivi le tutoriel et j'ai lu pas mal de littérature mais je suis toujours bloqué. J'utilise les Vertrex Array Object, les Vertrex Buffer Objects (pas sûr que cela soit important dans mon cas). Je pense que je suis vraiment pas loin de mon but, mais je bute sur les quelques lignes de code me permettant de voir mes deux images correctement déformées dans le casque.

    Est-ce que quelqu'un pourrait m'indiquer la manip' ? Est-ce qu'il existe un projet minimal en C++ précisant comment faire ?

    Merci d'avance aux bonnes âmes qui pourront m'aider

  2. #2
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    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 031
    Points : 11 477
    Points
    11 477
    Billets dans le blog
    11
    Par défaut
    Comment ce genre de périphérique est-il vu au niveau système ? 2 écrans ? Un seul stéréoscopique ?
    Parce que le principe est je pense de mettre ton appli en plein écran.
    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
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par dragonjoker59 Voir le message
    Comment ce genre de périphérique est-il vu au niveau système ? 2 écrans ? Un seul stéréoscopique ?
    Parce que le principe est je pense de mettre ton appli en plein écran.
    Pardon, j'ai pas été hyper clair sur ce point.

    J'affiche ma scène dans une fenêtre (plein écran ou pas). J'ai deux demi-fenêtres (c'est juste deux plans 3d cote à cote), divisées sur l'axe vertical.

    Je souhaite appliquer un fragment shader à toute la surface de ma scène. Dans mon cas, c'est une déformation, mais ça pourrait être un ton sépia, un halo rouge sur les bords parce que j'ai pris des dégâts, un flou de bougé, etc.

    Je suppose qu'il faut que je déclare un framebuffer de la taille de la fenêtre (ou écran), que je fasse un "render to texture" de mes deux demi parties, que je les colle dans le framebuffer et qu'ensuite j'applique mon fragment shader au framebuffer. C'est juste la toute dernière étape qui me manque. Mais je maitrise encore mal les concepts, je dis peut-être des bêtises.

    J'espère que je suis plus clair.

    Pour info, l'oculus rift est vu comme un second écran par windows. Dans mon cas, il est en mode recopie d'écran, c'est plus simple pour développer. Mais y'a rien de magique, il faut juste appliquer la déformation sur la fenêtre finale (en admettant qu'elle soit en plein écran).

    Merci encore.

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


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

    Après toute la littérature que vous avez lu, je vous conseille nos tutoriels : http://jeux.developpez.com/tutoriels...g-3d#opengl-3d et plus précisément :
    http://tcuvelier.developpez.com/tuto...less-opengl-4/ (en particulier celui sur les shaders)
    http://alexandre-laurent.developpez....L/OpenGL-GLSL/
    http://alexandre-laurent.developpez....GL/OpenGL-FBO/

    Pour chaque rendu (affichage d'une scène dans un framebuffer), un programme shader peut être associé. Par défaut, le framebuffer correspond à afficher sur l'écran. Même pour ce cas là, il est possible d'associer un shader au rendu et donc, d'effectuer votre effet, donc pas besoin de FrameBufferObect (FBO). Par contre, pour des effets plus avancées, il vous faudra peut être plusieurs passe (rendu successifs d'une même scène).

    Donc, l'idée est de :

    - charger le shader ;
    - le compiler
    - le rendre actif (le « binder »)
    - afficher la scène

    et vous aurez l'effet voulu.
    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
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Bonjour,

    Après toute la littérature que vous avez lu, je vous conseille nos tutoriels : http://jeux.developpez.com/tutoriels...g-3d#opengl-3d et plus précisément :
    http://tcuvelier.developpez.com/tuto...less-opengl-4/ (en particulier celui sur les shaders)
    http://alexandre-laurent.developpez....L/OpenGL-GLSL/
    http://alexandre-laurent.developpez....GL/OpenGL-FBO/
    Merci pour ces pointeurs. J'en ai déjà lu une bonne partie, mais une bonne relecture à tête reposée s'impose.



    Pour chaque rendu (affichage d'une scène dans un framebuffer), un programme shader peut être associé. Par défaut, le framebuffer correspond à afficher sur l'écran. Même pour ce cas là, il est possible d'associer un shader au rendu et donc, d'effectuer votre effet, donc pas besoin de FrameBufferObect (FBO). Par contre, pour des effets plus avancées, il vous faudra peut être plusieurs passe (rendu successifs d'une même scène).
    Ah c'est peut-être la subtilité qui me manquait. Tous les exemples que j'ai lu appliquent un shader à un framebuffer qui sert ensuite de texture à un deuxième objet. Si le framebuffer par défaut est l'écran, dans ce cas, ok.

    J'ai pas mal de code dans tous les sens, je vais faire le ménage, et y aller pas à pas. Je pense que je suis vraiment pas loin du but.

    Donc, l'idée est de :

    - charger le shader ;
    - le compiler
    - le rendre actif (le « binder »)
    - afficher la scène

    et vous aurez l'effet voulu.
    Oui, merci, tout ça, j'ai

    Merci encore.

Discussions similaires

  1. Fragment shader - linux vs Win
    Par Omeyocan dans le forum OpenGL
    Réponses: 8
    Dernier message: 30/06/2007, 22h41
  2. association KeyStroke d'un JMenuItem à un écran
    Par Invité dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 21/11/2006, 16h20
  3. fragment shader: passage en n&b
    Par nikhun dans le forum OpenGL
    Réponses: 15
    Dernier message: 25/09/2006, 08h40
  4. Ajustement d'une forme sur tout l'écran
    Par marsupilami34 dans le forum Composants VCL
    Réponses: 1
    Dernier message: 21/06/2005, 09h49
  5. [CSS] Background-image étirée sur tout l'écran
    Par Amnesiak dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 04/03/2005, 12h24

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