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

Physique Discussion :

Aide sur les collisions


Sujet :

Physique

  1. #1
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations forums :
    Inscription : Octobre 2005
    Messages : 141
    Points : 135
    Points
    135
    Par défaut Aide sur les collisions
    Salut !

    Je débute en OpenGL (couple C++/SDL/OpenGL) et j'aimerais savoir comment gérer les collisions...

    J'ai fait beaucoup de recherches, sans rien trouver de "bien" pour moi. Mon niveau en C++ n'est pas élevé (je connais que le C) donc soit le tutoriel que je trouve demande un niveau en C++ beaucoup plus élevé que le mien (je connais/maîtrise que les classes en fait), soit le tutoriel est fait pour GLut, et enfin soit il est fait pour de la 2D...

    Je trouve plutôt dommage que beaucoup de cours (si ce n'est tous) sur l'OpenGL ne parlent que tardivement (pas ?) de la gestion des collisions et pourtant c'est indispensable (même dès le début).

    Je ne demande pas un code avec des fonctions mais des pistes pour coder moi même mon gestionnaire de collisions comme ça je serais tranquille.

    Merci à vous.

    Kr00pS

  2. #2
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    le probleme, c'est que la detection de collision n'est pas du tout un probleme pour debutants, donc c'est logique qu'on ne l'aborde pas rapidement.
    sinon, moi j'ai resolu le probleme avec ca : http://ode.org/
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  3. #3
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    La solution la plus simple est d'affecter un centre et un rayon à tout objet, mettant donc une sphère autour de l'objet (cf BoundingSphere).

    En effet, cela permet de rapidement voir s'il y a une collision entre deux objets puisqu'il suffit de calculer la distance entre le centre des deux objets et voir si c'est inférieur au maximum des deux rayons...

    La solution suivante et de le faire avec des boîtes (cf BoundingBox)...

    Enfin, pour gérer la collision, il suffit de savoir ce que tu veux (rebondissement, arrêt...) et cela peut dépendre du type de l'objet...

    Jc

  4. #4
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations forums :
    Inscription : Octobre 2005
    Messages : 141
    Points : 135
    Points
    135
    Par défaut
    Citation Envoyé par bafman
    le probleme, c'est que la detection de collision n'est pas du tout un probleme pour debutants, donc c'est logique qu'on ne l'aborde pas rapidement.
    sinon, moi j'ai resolu le probleme avec ca : http://ode.org/
    Je vais regarder ça, la doc' est plutôt longue et en anglais (ça va me prendre du temps). Merci

    Même si à la place du moteur physique (si j'ai bien compris le principe) complet, j'aurais préféré juste codé ce dont j'ai besoin.

    Citation Envoyé par fearyourself
    La solution la plus simple est d'affecter un centre et un rayon à tout objet, mettant donc une sphère autour de l'objet (cf BoundingSphere).

    En effet, cela permet de rapidement voir s'il y a une collision entre deux objets puisqu'il suffit de calculer la distance entre le centre des deux objets et voir si c'est inférieur au maximum des deux rayons...

    La solution suivante et de le faire avec des boîtes (cf BoundingBox)...
    Merci pour les solutions mais je ne comprends pas comment je peux affecter un centre et un rayon à chaque objet que je fais...

    Je crée mon objet avec glVertex puis je crée un point et une ligne (les deux étant reliés) sur ce même objet (le point au centre, et la ligne reliée du point à l'extrémité de l'objet) et à chaque fois que je bouge l'objet, je fais la même translation sur cet ensemble ?

    Citation Envoyé par fearyourself
    Enfin, pour gérer la collision, il suffit de savoir ce que tu veux (rebondissement, arrêt...) et cela peut dépendre du type de l'objet...

    Jc
    Pour le moment, je ne demande pas de faire un FPS, pas de rebondissement, juste un bloquage sur les autres "objets" quahd ils sont détéctés.

    Kr00pS

  5. #5
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    En principe tu dois bien avoir une structure qui définit un "objet" de ta scène histoire d'avoir en mémoire les différentes positions/vitesses des objets, non ?

    Pour chaque objet, il suffit de lui ajouter les informations Centre-Rayon...

    Jc

  6. #6
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations forums :
    Inscription : Octobre 2005
    Messages : 141
    Points : 135
    Points
    135
    Par défaut
    Citation Envoyé par fearyourself
    En principe tu dois bien avoir une structure qui définit un "objet" de ta scène histoire d'avoir en mémoire les différentes positions/vitesses des objets, non ?

    Pour chaque objet, il suffit de lui ajouter les informations Centre-Rayon...

    Jc
    Oula, non, c'est pas si compliqué...

    J'ai juste une classe Dessin avec toutes mes fonctions de dessins + ce qu'il faut pour les textures;

    Mes objets sont fixes pour le moment, il n'y a que le "joueur" qui bouge (c'est une caisse pour le moment) donc pour un objet, je vois pas l'utilité de faire une structure comme celle la.

    Sinon, une fois que j'ai rajouté ça, la detection se passe comment ?

    Merci

    Kr00pS

  7. #7
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Jeu 3D ou 2D ?
    c'est une caisse pour le moment
    Une voiture ou un block 2D ou 3D ?

    Si c'est un jeu 3D vu de dessus comme en 2D, tu peux simplifier les calculs.

  8. #8
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations forums :
    Inscription : Octobre 2005
    Messages : 141
    Points : 135
    Points
    135
    Par défaut
    C'est un "jeu" (j'aime pas dire ça, vu que c'est totalement faux) en 3D.

    La caméra n'est pas en vue de dessus, elle est comme dans les jeux de rôle (on voit la scène de haut).

    C'est un bloc, oui. :p

  9. #9
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Bon déjà tu connais la taille du block en 3D, c'est ta BoundingBox, c'est ton personnage.

    Tu dois aussi avoir les coordonnées du sol.

    Ensuite il "suffit" juste de calculer que ta BoundingBox est bien sur le sol.

    Tu peux le calculer en 2D, vu de dessus si j'ai bien compris, même si c'est une vue "iso-like"

    Donc vu de dessus tu dois avoir un "damage". (Pleins de cases)

    Algo:

    Si sur ton prochain mouvement un des quatres sommets de ta BoundingBox (de ton carré qui représente ton joueur) ne se trouve pas dans une des cases du sol, alors n'avance pas dans cette direction. Sinon avance.

  10. #10
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations forums :
    Inscription : Octobre 2005
    Messages : 141
    Points : 135
    Points
    135
    Par défaut
    Je comprends dans le principe, mais pas dans les détails...

    Comment puis-je avoir les coordonneés de ma boîte et des autres dynamiquement (sans regarder les valeurs des translations et le faire manuellement) ?

  11. #11
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Tu n'as pas un objet personnage avec les coordonnées de sa position et la taille de la BoundingBox qui le représente ?

    Idem pour le sol ?

  12. #12
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations forums :
    Inscription : Octobre 2005
    Messages : 141
    Points : 135
    Points
    135
    Par défaut
    Oui...

  13. #13
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Si tu as bien fait les choses, et j'imagine que c'est bien fait.

    Tu dois pouvoir avoir les coordonnées du perso x et y ou x et z sur un plan parallèle au sol.

    Tu calculs les 4 coordonnées max de ton perso, en [x1 z1],[x2 z2],[x3 z3],[x4 z4] ou même chose en x y (dépend comment tu gère ton monde)

    Vu de dessus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            [x1 z1]       [x2 z2]
                   o-------o
                   |   x   |
                   o-------o
            [x3 z3]       [x4 z4]
    x -> millieu du perso



    Ensuite il suffit de faire la même chose pour le sol, en faire une liste, parcourir la liste et faire ce que j'ai dit plus haut.

    Fait un dessin sur un bout de papier, vu de dessus, de ce que tu vois, cela va t'aider je pense.

  14. #14
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations forums :
    Inscription : Octobre 2005
    Messages : 141
    Points : 135
    Points
    135
    Par défaut
    Je débute avec OpenGL donc j'ai aucun système pour partionner le sol, mon sol, c'est un rectangle 2D sans profondeur (avec glVertex).

    Pour les arbres BSP, j'ai quasiment rien compris.

    J'ai compris les Octrees, mais implanter ça dans mon projet de test, je me demande si c'est bien la peine.

  15. #15
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Comment sont tes murs ?

    Ils se trouvent au niveau des bords du rectangle de ta pièce ?

    Ou ils ont des formes plus complexe qu’un simple rectangle vu de dessus ?

  16. #16
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par Ti-R
    Comment sont tes murs ?

    Ils se trouvent au niveau des bords du rectangle de ta pièce ?

    Ou ils ont des formes plus complexe qu’un simple rectangle vu de dessus ?
    Je pense que maintenant serait le moment de montrer un peu de code pour voir comment tu dessines les choses, comment tu gères le personnages, etc....

    Au moins une image pour nous donner une idée de ce que tu fais...

    Jc

  17. #17
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations forums :
    Inscription : Octobre 2005
    Messages : 141
    Points : 135
    Points
    135
    Par défaut
    Il n'y a pas de murs, je veux simplement gérer les collisions avec d'autres objets dans la scène, les quadriques entre autres.

    Désolé de ne pas l'avoir posté plus tôt, voici un screen de la scène :


    Le code ici (pas organisé, sans commentaire, juste pour les tests) :
    main.cpp
    sdlglutils.h
    sdlglutils.cpp

    Merci encore pour votre aide...

    Kr00pS

  18. #18
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    BoundingBox 3D ou 2D comme tu le souhaites

  19. #19
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations forums :
    Inscription : Octobre 2005
    Messages : 141
    Points : 135
    Points
    135
    Par défaut
    Je veux bien, mais je ne sais toujours pas comment connaître les coordonées de mes objets ?

    Je fais une classe objet avec les coordonnées et la texture correspondante et après je modifie les coordonnées grâce à un glTranslated ?

    Merci pour votre aide et pour votre patience car je ne comprends pas tout, tout de suite.

    Kr00pS

  20. #20
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Je fais une classe objet avec les coordonnées et la texture correspondante
    Oui

    et après je modifie les coordonnées grâce à un glTranslated ?
    Non

    Il vaut mieux modifier les coordonnées de ton objet dans l'objet !

    Ensuite tu l'affiches, ce qui te permet de savoir ou se trouve ton objet, et de faire les calculs appropriés.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. besoin d'aide sur les ORB
    Par floorfille dans le forum CORBA
    Réponses: 4
    Dernier message: 24/08/2004, 15h43
  2. Aide sur les groupes (ADO)
    Par portu dans le forum QuickReport
    Réponses: 3
    Dernier message: 18/08/2004, 16h13
  3. Filemaker ... besoin d'aide sur les Plugin
    Par joange dans le forum Autres SGBD
    Réponses: 3
    Dernier message: 22/04/2004, 10h16
  4. Petite aide sur les triggers ?
    Par krimson dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 16/04/2004, 16h28
  5. [CR] besoin d'aide sur les formules
    Par GuillaumeDSA dans le forum Formules
    Réponses: 4
    Dernier message: 10/07/2003, 12h19

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