Partage
  • Partager sur Facebook
  • Partager sur Twitter

Objets 3D vers image 2D

    12 novembre 2021 à 12:34:30

    Bonjour à tous,

    J'essaye de programmer un simulateur. J'ai donc un ensemble d'objets qui sont composés de plusieurs triangles, formés par 3 points repérés dans l'espace par leurs coordonnées (x, y, z). Sur ces objets on applique différentes forces, comme par exemple la gravité, au centre de masse de la forme délimitées par l'ensemble des points.

    Ma question est comment obtenir une image 2D (Destinée à être envoyée en réseau) à partir de ces ensembles de points, afin d'avoir un visuel du monde construit ? J'ai beaucoup entendu parler d'OpenGL, mais j'avoue ne pas avoir tout compris entre les projections, les rotations, les shaders... et de toute façon je n'est pas l'impression qu'on puisse projeter ces propres objets, mais qu'on soit obligé d'utiliser directement la bibliothèque pour les construire...

    • Partager sur Facebook
    • Partager sur Twitter
      12 novembre 2021 à 13:36:13

      Salut !

      Les biblothèques comme OpenGL sont faites pour dialoguer avec la carte graphique et utiliser ce qu'elles savent faire.

      En gros, tu donnes à la carte graphique des triangles (par milliers, par millions), des matrices de transformation et de projection, éventuellement des textures et plein d'autres effet, et elle te pond l'image.

      Il faut presque voir la carte graphique comme un ordinateur autonome spécialisé dans le rendu.

      Les shaders, ce sont des bouts de programmes que tu envoies à la carte graphique, pour personnaliser le rendu, charger le processeur de la carte graphique (GPU) en déchargeant un peu le processeur central (CPU)

      Donc OpenGL, shader, etc, c'est si tu veux programmer et exploiter ce que peu faire la carte graphique.

      Maintenant, si tu ne te sens pas à l'aise, il y a toujours possibilité d'écrire des pixels dans un buffer (de manière conventionnelle, tu remplis un tableau), et de l'envoyer à la carte graphique pour qu'elle affiche le tout sans rien faire elle même.

      Je t'ai bien parlé de triangles, car la carte graphique sait manier des triangles. 

      Comment sont stockées tes données graphiques ? Ce sont des triangles ou autre chose ? 

      (si c'est autre chose, on pourra parler du concept de tessellation, qui transforme des entités 3D codées autrement (Brep, CSG...) en triangles pour l'affichage)

      • Partager sur Facebook
      • Partager sur Twitter

      Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

        13 novembre 2021 à 15:06:46

        Salut et merci de la réponse,

        Je n'ai pas de données graphique à proprement parler. En fait, j'ai besoin de pouvoir représenter des objets les uns par rapport aux autres dans un repère, dans lequel ces objets évoluent. Ce "monde virtuel" est soumis à ses propres lois (Par exemple faire pousser un arbre revient à empiler un nouveau cerce de hauteur h sur le tronc, et donc à monter tous les points au dessus d'une hauteur h selon z), mais j'ai besoin d'avoir une sortie visuelle de ce qui se passe. Je voulais délimité chaque objet par un ensemble de triangle et si il y a une collision par exemple, une déformation reviendrait à rajouter des triangle pour créer un renfoncement (Mais il a peut-être une meilleure manière de faire).

        L'objectif final est de faire évoluer une petite créature dans ce monde, et qu'elle puisse interagir avec son environnement.

        • Partager sur Facebook
        • Partager sur Twitter
          13 novembre 2021 à 16:05:54

          Il vaut mieux utiliser des bibliothèques 3D pour ce genre de choses. Par exemple p5js
          • Partager sur Facebook
          • Partager sur Twitter
            14 novembre 2021 à 10:53:53

            padabt a écrit:

            Je voulais délimité chaque objet par un ensemble de triangle et si il y a une collision par exemple, une déformation reviendrait à rajouter des triangle pour créer un renfoncement (Mais il a peut-être une meilleure manière de faire).

            ça c'est assez hard. 

            Mais ma question : est ce que toi tu fais de la physique et tu as envie d'implémenter tout cela toi même (calculer tous les triangles en fonction des déformations, etc etc.... et tout ce qu'il te manque c'est l'affichage des triangles ?)

            Ou alors tu veux un truc qui fasse tout tout seul ?

            En gros, tu cherches juste comment afficher ce que tu fais toi même, ou bien tu veux une lib qui gère la physique, les déformations, et tu n'as plus grand chose à faire ?

            • Partager sur Facebook
            • Partager sur Twitter

            Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

              14 novembre 2021 à 11:10:57

              J'étais plutôt parti sur la première option, parce que pour pouvoir faire évoluer et interagir des créatures dans ce monde je vais devoir implémenter énormément de choses et d'avoir la main sur tous les paramètres, ce qui n'est pas nécessairement facile avec une lib toute faite. Par exemple, il faut pas qu'un choc contre une vitre produise le même effet qu'un choc contre un mur de béton, il faut pouvoir simuler une croissance organique...

              Maintenant, je suis partisan de la logique qui veut que le meilleur programme c'est celui dans lequel t'as écrit le moins de lignes toi-même, alors si y a moyen de trouver une solution toute faite, je prend... mais pour l'instant j'ai pas trouver

              -
              Edité par padabt 14 novembre 2021 à 11:11:33

              • Partager sur Facebook
              • Partager sur Twitter
                14 novembre 2021 à 11:17:03

                Alors si tu es physicien et qu'en effet tu veux qu'un choc sur du béton ne soit pas pareil que sur une vitre, il faudra peut être voir pour faire ça toi même.

                Après, il te suffira de fonctions pour afficher des triangles, et hop !

                • Partager sur Facebook
                • Partager sur Twitter

                Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                  14 novembre 2021 à 11:29:11

                  >tu veux qu'un choc sur du béton ne soit pas pareil que sur une vitre, il faudra peut être voir pour faire ça toi même.

                  Heu, je ne comprend pas pourquoi vous ne lui conseillez pas d'utiliser tout simplement un moteur de jeu.

                  Il aura d'un coup un moteur de rendu, un moteur physique, un moteur réseau et même la possibilité d'utiliser des "langages" visuels pour la création de mécanismes.

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                    14 novembre 2021 à 13:00:24

                    J’y ai pensé au moteur de jeu, mais j’en ai trouvé aucun avec un tutoriel assez complet pour que je comprenne tout et que je vérifie que ça réponde bien à mes besoins. Si tu as une suggestion bacelar…
                    • Partager sur Facebook
                    • Partager sur Twitter
                      14 novembre 2021 à 20:18:15

                      Les "problèmes" des tutoriels, c'est qu'ils illustrent les manières les plus "courantes" d'utiliser un outil.

                      Les moteurs de jeux sont des énormes boîte à outils où on peut trouver énormément  (voir trop) de chose.

                      Vous ne donnez absolument pas assez de détails pour vous conseiller tel moteur ou tel autres. Il sont tous capables de faire ce que vous demandez, et bien plus, et savoir celui qui est le plus simple pour vous, bin c'est une question qui ne peut être répondu que subjectivement, en fonction de vos goûts et de votre bagage.

                      Mais tous les moteurs de jeux "sérieux" intègrent au moins, un moteur de rendu graphique "hautement" customisable, un moteur physique évolué, des bibliothèques de communication via le réseau, via le Cloud ou pas.

                      Il ne faut pas croire que l'usage d'un moteur "facilite automatiquement" le travail. Il faut quand même maitriser beaucoup de chose pour commencer à produire un machin, mais vous cochez déjà pas mal de cases où l'usage d'un moteur de jeu vous fera gagner du temps.

                      Mais vous devez vous conformer à la conception du moteur, comme vous serez obligé de vous conformer à la conception d'une librairie à la OpenGL, etc...

                      Mais faites attention à ce que cette conception vous servent de tuteur pour votre conception et ne vous basez pas aveuglement dessus, pour pouvoir "facilement" changer de moteur.

                      Un truc que tout moteur de jeu vous imposera, c'est de respecter sa manière de gérer la physique et je trouve que la description dans votre premier message est trop "directifs". Généralement, un objet dans un moteur graphique, c'est bien plus qu'un simple mesh composés de triangles "en vrac" : objet hiérarchisé, avec des type de jointure entre section, rigging avec les "bones" de l'objet, textures, paramétrage des interactions avec la lumière, niveau de détail en fonction de la "profondeur" (LOD), les enveloppes de collisions, etc...

                      Qu'est-ce qui dans votre projet interdirait d'utiliser un moteur comme Unity3D, Unreal Engine (~gratuit) ou des moteurs Open Source un peu moins "confortable" ?

                      Dans un moteur comme Unity3D, vos objets seraient des "Game Objet" disposant d'un composant "RigidBody3D", d'un Collider3D, d'un MeshRenderer et des quelques scripts pour gérer vos "collisions spéciales" et customiser MLAPI pour correspondre à votre infrastructure/conception réseau. 

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                        14 novembre 2021 à 22:24:00

                        bacelar a écrit:

                        Mais vous devez vous conformer à la conception du moteur, comme vous serez obligé de vous conformer à la conception d'une librairie à la OpenGL, etc...

                        Pour un moteur il faut se conformer mais on peut facilement découpler à 100% le code de l'application et le code spécifique à OpenGL ou autre API graphique
                        • Partager sur Facebook
                        • Partager sur Twitter
                          15 novembre 2021 à 15:54:59

                          Ça me rappelle une étude d'un projet militaire, où sans en dévoiler les données, il était question de faire une réponse globale à une attaque multiple avec des retours graphiques. Pendant quelques secondes je me suis dit qu'il fallait une année de travail et qu'avec un moteur de jeu (lui a déjà tout pour piloter les sites et on aurait des graphiques du feu de Dieu), on pourrait tout faire en quelques semaines. Evidemment je ne pouvait pas proposer cette solution :lol:

                          A l'inverse, utiliser un moteur de jeu pour un problème purement physique, j'ai plus de doute sur le fait que ça simplifie les choses.

                          • Partager sur Facebook
                          • Partager sur Twitter

                          En recherche d'emploi.

                            15 novembre 2021 à 16:06:50

                            Dalfab a écrit:

                            A l'inverse, utiliser un moteur de jeu pour un problème purement physique, j'ai plus de doute sur le fait que ça simplifie les choses.


                            ça dépend en effet si la demande est trop spécifique et sort du cadre d'un moteur de jeu, ou bien rentre pile dedans.

                            A noter un truc important : faire des jeux vidéo, c'est tricher : c'est à dire que l'idée n'est pas forcément d'avoir une physique parfaite, mais de faire croire au joueur que la physique est bonne :

                            Par exemple, si tu peux avoir un résultat approché (mais inexact) avec 10 fois moins de calculs, si ça ne se voit pas trop, ils n'hésitent pas.

                            Donc a voir si les moteurs de jeux ont une physique réelle, ou bien une physique moins calculatoire qui donne illusion que c'est réel.

                            • Partager sur Facebook
                            • Partager sur Twitter

                            Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                            Objets 3D vers image 2D

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            • Editeur
                            • Markdown