Partage
  • Partager sur Facebook
  • Partager sur Twitter

[OpenGL]Collision

Aide svp

    9 juin 2006 à 14:21:15

    Salut,
    Je veux faire un niveau de jeu en 3D (genre half-life) mais je n'arrive pas a gerer les collision mur/perso. Et mes murs sont en fait un tableau de 20 sur 20. Est-ce que quelqu'un a une idee?
    Merci.

    EDIT : Au fait je deplace ma camera sur l'axe X et Z et j'uitilise de la trigo.
    • Partager sur Facebook
    • Partager sur Twitter
      9 juin 2006 à 14:30:23

      Euh il faut X Y Z si ut fait de la 3d tu sais ?
      ( et pour le tableau ça serais plutot 20 par 20 par 20 )
      • Partager sur Facebook
      • Partager sur Twitter
        9 juin 2006 à 14:33:10

        Je fais de la 3D mais je fonctionne sur un plan 2D pour la map.
        • Partager sur Facebook
        • Partager sur Twitter
          9 juin 2006 à 14:33:22

          rom1504 -> Quand tu marche tu n'as pas l'habitude de t'élever dans les airs à ce que je sache non ?
          Il se déplace sur un axe et tourne autour d'un autre. (dépendant de avancer-reculer-gauche-droite)
          Essaye d'incrémenter le x à chaque fois qu'il fait avancer (par exemple dans une fonction "testPosition()"), et s'il est égal au x du mur tu ne fais rien. (pas de fonction "avancerPerso()" par exemple)
          • Partager sur Facebook
          • Partager sur Twitter
            9 juin 2006 à 14:33:55

            Mais lui il parle pas de sa 3D, mais des mouvements. Je suppose que la caméra à une hauteur fixe. En gros si je jeu est très simple et que le sol est toujours à la même hauteur alors tu n'as pas vraiment à te soucier de la hauteur. Pareil pour les mur ^^ ils ont une hauteur fixe, donc pas besoin de s'en soucier.

            Pour les collision je te conseil de tester les coordonnées de ta caméra par rapport aux murs. Tu testes mur par mur si ta caméra est dedans ou pas.

            Edit: lol on à tous posté la même chose en même temps :)
            • Partager sur Facebook
            • Partager sur Twitter
              9 juin 2006 à 14:35:50

              Je vois que les grands esprits se rencontrent :lol:
              • Partager sur Facebook
              • Partager sur Twitter
                9 juin 2006 à 14:39:43

                Je sais moi je fais comme ca:

                for(i=0;i<20;i++)
                for(j=0;j<20;j++)
                if(camZ<=i-1&&camZ>=i+1
                &&camX<=j-1&&camX>=j+1)
                if(map[i][j]==MUR)
                {
                //Collision
                }

                mais ca ne fonctionne pas car au plus j'avance au plus il fait trop vite la collision.
                • Partager sur Facebook
                • Partager sur Twitter
                  9 juin 2006 à 18:04:54

                  Et si le perso saute et a une collision on fait comment ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    9 juin 2006 à 20:22:58

                    Bonsoir !

                    Je me suis aussi un peu intéressé à la détection des collisions en 2D et à la réaction de la collision. Il y a plusieurs méthodes pour détecter des collisions. Dans les jeux en 3D on fait généralement une approximation très grossière du modèle du personnage pour détecter les collisions afin de ne pas ralentir le jeu. Cela ne pose pas trop de problème. C'est beaucoup plus compliqué lorsque l'on traite les collisions entre deux polyèdres quelconques... une grenade rebondissant sur un personnage par exemple..
                    Une recherche sur google donne déjà quelques pistes pour les collisions : volumes englobants, méthode d'axes de séparations.. Dans tous les cas, il faut bien réfléchir à la méthode que l'on va utiliser, pour arriver au résultat souhaité. Il faut prendre une méthode adaptée au problème. Les méthodes dont je parle plus haut ne sont pas adapté pour un simple jeu de casse-brique : le bazooka pour écraser la mouche.. Par contre dés que l'on touche à la 3D ce genre de méthode devient indispensable..
                    Cependant, pour un FPS en 3D vraiment basique on doit quand même pouvoir modéliser les choses simplement en ne considérant que des objets parallélépipédique pour la détection des collisions. On peut alors déterminer les collisions en testant les objets deux à deux et en comparant leurs 3 coordonnées dans l'espace, et leurs dimensions. Cette méthode implique que les objets ne pourront effectuer que des translations. Elle deviendra très imprécise et inadaptée si l'on affiche des objets plus complexes tout en continuant à les considérer comme des parallélépipèdes pour la détection des collisions.

                    Pour ceux que ça intéressent voici un cours sur la méthode d'axes de séparation. Les explications sont en anglais et souvent trop courtes pour que l'on puisse bien comprendre le code du premier coup. La méthode de séparation 2D présenté ici utilisant OpenGL peut être selon l'auteur étendue pour la détection des collisions en 3D.

                    Je pense que ça serait vraiment bien d'en faire un tuto pour le sdz. Pour l'instant j'ai pondu un code en C avec SDL correspondant au premier chapitre de ce cours qui en comporte 8 en tout. Je veux bien partager mon code si ça intéresse quelqu'un.
                    Ce cours propose en fait une méthode complète pour réaliser un moteur physique 2D (il n'y a pas que la "simple" détection des collisions qui est traitée). J'aimerais bien pouvoir arriver à ce résultat, et pourquoi pas faire un tuto la dessus.. Un peu d'aide serait la bienvenue, si des personnes ayant un bon niveau en C et un niveau correct en maths et en physique veulent m'aider, ya pas de soucis, envoyez moi un MP :]

                    PS : je me suis permis de faire un miroir pour ce cours car le site de l'auteur est très limité en bande passante... http://inakoll.free.fr/Polycolly.zip

                    EDIT : si je dépose ce lien c'est que pour moi, il vaut de l'or ! Je n'ai pas trouvé mieux, un petit moteur physique 2D bien commenté sous forme de tuto... Allez y jeter un coup d'oeil, ça en vaut la peine d'après moi !
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Inkamath on GitHub - Interpréteur d'expressions mathématiques. Reprise du développement en cours.

                    [OpenGL]Collision

                    × 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