Partage
  • Partager sur Facebook
  • Partager sur Twitter

openGL créer une 2eme camera

Sujet résolu
    18 août 2017 à 9:21:22

    Hello everyone.
    Ma question peut sembler incompréhensible, et si c'est le cas, je vous expliquerai le contexte.

    Mais en OpenGL3, est-il possible de créer facilement une 2eme fenetre (avec GlViewPort) qui permet d'afficher la même chose que son programme principale, mais sans mouvement de camera? C'est à dire, utiliser "le même VAO" mais qui ne bouge pas quand j'appuie sur les flèches...
    Un exemple :

    Dans cette image, au centre , il y a le programme principale, qui me permet de me balader dans un nuage de points. Et j'aimerai faire en sorte que le rendu en haut a droite soit le rendu du même nuage de points, mais sans le mouvement de la camera?


    Merci beaucoup!
    Une bonne journée:)

    • Partager sur Facebook
    • Partager sur Twitter

    « Je n’ai pas besoin de preuve. Les lois de la nature, contrairement aux lois de la grammaire, ne permettent aucune exception. »
    D. Mendeleïev

      18 août 2017 à 11:23:31

      Oui avec un FBO (Framebuffer Object), donc 2 rendu (avec les même données GPU)
      • Partager sur Facebook
      • Partager sur Twitter
        23 août 2017 à 11:00:03

        Oups ahah! Je croyais avoir répondu.

        C'est effectivement bien ce que je pensais...
        J'ai fais ça. J'ai encore une erreur, mais je pense que c'est plus inhérant au FBO. (en gros, la fenetre ne reste pas en haut a droite, mais est contenu dans mon programme, ducoup mon écran (qui affiche pas les bons résultats non plus) bouge en même temps que ma camera.

        Merci encore

        • Partager sur Facebook
        • Partager sur Twitter

        « Je n’ai pas besoin de preuve. Les lois de la nature, contrairement aux lois de la grammaire, ne permettent aucune exception. »
        D. Mendeleïev

          23 août 2017 à 11:43:45

          Sinon, pas besoin de deuxième FBO, un simple glViewport suffit.
          • Partager sur Facebook
          • Partager sur Twitter

          Si vous ne trouvez plus rien, cherchez autre chose.

            24 août 2017 à 15:21:38

            Bon dieu. J'ai réussi mais c'était compliqué ... x)
            Merci pour vos info :)

            Vous pouvez m'aider peut etre pour une derniere chose :
            j'ai 2 viewport :
            glViewPort(0,0,screenWidth, screenHeight)

            //render

            glViewPort(screenWidth/2, screenHeight/2, screenWidth/2, screenHeight/2)

            //render

            Et mon rendu c'est ça :

            On peut voir que j'ai une fenetre qui prends tout l'écran, avec un truc dessiner, et qu'il y a une partie noire en haut à droite (qui est mon 2eme viewport). Est-ce que vous savez pourquoi je ne dessine que dans le cadre haut-droite de la 2eme viewport? Enfin, je veux dire que mon viewport est encore divisé en 4. Alors que normalement glViewPort prends en parametre le début et la taille, non? Ducoup, ça devrait être rendu sur tout le quart de fenetre, non?

            merci bueaoucp!

            • Partager sur Facebook
            • Partager sur Twitter

            « Je n’ai pas besoin de preuve. Les lois de la nature, contrairement aux lois de la grammaire, ne permettent aucune exception. »
            D. Mendeleïev

              29 août 2017 à 11:48:26

              Yopla! Je viens quand même aux nouvelles, j'ai réussi à faire ce que je devais avec la 2eme camera. Le problème venait du fait que je faisait un rendu en FBO, en changeant le viewport. ça appliquait 2 fois l'offset pour des raisons inconnues, donc j'ai changé l'offset à (0,0), pour avoir le rendu en bas a droite plutôt qu'en haut a gauche et tadam, la magie opera :)
              De plus, j'ai aussi réussi à faire mon viewing frustum culling, ducoup c'est cool!

              Merci de votre aide.
              • Partager sur Facebook
              • Partager sur Twitter

              « Je n’ai pas besoin de preuve. Les lois de la nature, contrairement aux lois de la grammaire, ne permettent aucune exception. »
              D. Mendeleïev

                31 août 2017 à 14:23:43

                Pour plus de performances, un FBO n'est même pas nécessaire comme l'a dit dragonjoker: tu peux faire ton rendu par-dessus le rendu original avec un viewport.
                • Partager sur Facebook
                • Partager sur Twitter

                Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)

                  31 août 2017 à 14:28:39

                  Pour le moment, c'était vraiment qu'en debug que je l'utilisais. Si je dois l'utiliser plus que ça, je ferai les modifications nécessaires :)
                  Merci :)
                  • Partager sur Facebook
                  • Partager sur Twitter

                  « Je n’ai pas besoin de preuve. Les lois de la nature, contrairement aux lois de la grammaire, ne permettent aucune exception. »
                  D. Mendeleïev

                    31 août 2017 à 14:30:20

                    C'est aussi parce que c'est mille fois plus simple qu'utiliser un FBO ^^
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)

                      31 août 2017 à 18:21:06

                      Il faut savoir qu'OpenGL applique l'état précédent si on n'en change pas, donc effectivement, il faut redéfinir le viewport pour chaque étape :

                      1- Rendu dans ton FBO de la miniature, glViewport( 0, 0, miniature_width, miniature_height )
                      2- Rendu du FBO principal, glViewport( 0, 0, render_width, render_height )
                      3- Rendu de la miniature dans le FBO principal, glViewport( render_width - miniature_width, render_height - miniature_height, miniature_width, miniature_height )

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Si vous ne trouvez plus rien, cherchez autre chose.

                        1 septembre 2017 à 8:28:12

                        Mais ce que je comprends pas (excusez moi, c'est une logique que j'ai pas encore a 100% :/) c'est pourquoi c'est plus efficace de faire

                        1- Rendu dans ton FBO de la miniature, glViewport( 0, 0, miniature_width, miniature_height )
                        2- Rendu du FBO principal, glViewport( 0, 0, render_width, render_height )
                        3- Rendu de la miniature dans le FBO principal, glViewport( render_width - miniature_width, render_height - miniature_height, miniature_width, miniature_height )

                        que de faire

                        1- Rendu du FBO principal, glViewport(0,0,width, height);

                        2- rendu du FBO miniature (0,0,miniature_width, miniature_height);

                        ?

                        • Partager sur Facebook
                        • Partager sur Twitter

                        « Je n’ai pas besoin de preuve. Les lois de la nature, contrairement aux lois de la grammaire, ne permettent aucune exception. »
                        D. Mendeleïev

                          1 septembre 2017 à 8:48:35

                          Ça ne l'est pas, c'était un exemple pour expliquer pourquoi tu dois spécifier le viewport à chaque fois (et aussi le gros problème d'OpenGL: sa machine à état, Vulkan ftw!).

                          C'est pour ça que je te recommandais de faire ton rendu normalement, et d'ensuite respécifier le viewport pour la miniature, clear le color/depth buffer et faire le rendu de ta miniature une seconde fois.

                          Utiliser un FBO pour ta miniature n'a pas d'intérêt sauf si tu en as un de base (ce qui est le cas si tu fais du post-processing sur tes images par exemple) ou que tu veux rendre la même miniature plusieurs fois.

                          Petite pensée, étant donné que ça fait une région assez conséquente du premier rendu qui ne sera pas rendue, il pourrait être intéressant de discard les fragments générés dans cette région, ça te donnera plus de performance et tu n'auras même pas besoin de faire un second clear sur la région de la miniature (puisqu'elle n'aura pas été affectée par le rendu de la grande image).

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)

                            1 septembre 2017 à 9:02:30

                            Ok, oui. Je comprends maintenant.
                            Effectivement, je fais du post-processing, et je suis donc poussé à utilisé un Framebuffer, même pour la miniature.  Je ne l'ai pas créer juste pour faire un rendu FBO de mes données.


                            Oui, c'est vrai que ça fait quand même un quart des données, et je t'avoue que je n'y avais même pas pensé, je vais le faire au cas où j'en ai besoin, c'est pas très très compliqué.


                            Mais comme dit, j'ai réussi à faire ma 2eme camera, à débugguer mon view frustum culling, tout est quasiment OK à mon échelle maintenant :D

                            Merci du temps que vous avez pris pour m'aider en tout cas :)

                            EDIT : Je regarderai Vulkan pour des projets perso. Mais comme je risque de faire de l'openGL à mon boulot, je vais peut-être me perdre entre les 2, non? :(

                            -
                            Edité par KirbXCoucou 1 septembre 2017 à 9:03:20

                            • Partager sur Facebook
                            • Partager sur Twitter

                            « Je n’ai pas besoin de preuve. Les lois de la nature, contrairement aux lois de la grammaire, ne permettent aucune exception. »
                            D. Mendeleïev

                              1 septembre 2017 à 10:29:11

                              KirbXCoucou a écrit:

                              EDIT : Je regarderai Vulkan pour des projets perso. Mais comme je risque de faire de l'openGL à mon boulot, je vais peut-être me perdre entre les 2, non? :(

                              Je ne pense pas, les deux APIs sont suffisamment différentes pour pouvoir partitioner efficacement, le vrai danger serait de trop pratiquer OpenGL et d'avoir du mal à apprendre Vulkan à cause de ça (c'est mon cas et je ne te le souhaite pas).

                              En plus, il y a tellement de façon d'utiliser OpenGL (mauvaises pour la plupart), il y a des chances que ton expérience OpenGL en hobby et au boulot soit très différente.

                              • Partager sur Facebook
                              • Partager sur Twitter

                              Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)

                              openGL créer une 2eme camera

                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                              • Editeur
                              • Markdown