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 :

Empiler des AABB


Sujet :

Physique

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    786
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 786
    Points : 602
    Points
    602
    Par défaut Empiler des AABB
    Bonjour,
    je rencontre un petit soucis pour reussir a gerer un empilement de AABB.

    Ma simulation est simple (pour le moment^^) un sol de masse infinie, une box A, sur laquelle j'empile une Box B le tout sur le sol.

    Le probleme : la box B qui est sur la box A tremble legerement fonction de la masse de A.
    Si la masse de A >> B alors les tremblements sont proches de 0.
    Si la masse de A << B alors les tremblements s'accentuent.

    Mon probleme vient de ma fonction resolvePenetration qui ajuste les positions de A et B fonctions de leurs masses respectives, ce qui est correct dans le cas ou les deux solides sont mobiles. Mais dans le cas d'immobilite cela ne fonctionne pas.
    Exemple pour une penetration de 10 entre A et B:
    l'ajustement de la position correcte serait de +-10 sur le solide B car le solide A est sur le sol donc il ne peut pas s'enfoncer. Selon mon calcul je vais trouver un ajustement dependant de leur masse donc impossible de trouver +-10.


    Il faudrait pouvoir determiner lorsque un solide a atteint un etat de "stabilisation".

    Avez-vous une solution viable pour ce type de probleme??

    Merci :-)

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 382
    Points : 4 937
    Points
    4 937
    Par défaut
    une solution simple serait de mettre une vitesse en dessous de laquelle un solide est considéré comme immobile, et donc de ne plus effectuer les calculs de pénétration.

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    786
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 786
    Points : 602
    Points
    602
    Par défaut re
    Ok merci,
    je pense implementer un systeme de awake/sleep, fonction du mouvement effectuer les 3 dernieres secondes.
    Si ce mouvement est inferieure a une valeur E alors je passe l'objet en mode sleep.
    Et comme tu me l'as conseille si il est en mode sleep alors je n'effectuerai plus les calculs de penetrations.

    Si vous d'autre idee je suis preneur

    Merci

  4. #4
    Invité
    Invité(e)
    Par défaut
    Dans Game Physics Engine Development de Ian Millington, il fait la séparation entre les forces qui vont s'accumuler sur l'accélération et les "impulses" qui vont agir directement sur la vitesse instantanée (visiblement tu fais des impulses pour résoudre les collisions). Seulement les algos qu'il propose sont itératifs car résoudre une collision peut en produire une autre.

    Il discute aussi de comment "endormir" certains éléments, je pense qu'on ne peut pas empiler beaucoup de boites de manière stable sans ça.

    Une autre idée si tu n'as que ce cas de AABB empilées à résoudre : tu propage la bonne hauteur depuis la base jusqu'en haut. Mais bon c'est pas très général.

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    786
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 786
    Points : 602
    Points
    602
    Par défaut re
    Merci de ta reponse.

    Desole de remonter le sujet apres pas mal de temps...^^

    Mais je rencontre toujours des problemes a ce sujet.
    J'ai regarde le code source de box2d et il me semble qu'il n'a pas besoin d'endormir des solides pour permettre un empilement.

    Si quelqu'un a un bon tutoriel a ce sujet je suis preneur.

    Merci

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    786
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 786
    Points : 602
    Points
    602
    Par défaut re
    J'ai bien trouvé une réponse qui est de meler contraintes et iteration.

    En gros on se base sur la formule suivante qui doit etre vérifier a la fin de l'itération:
    VelContact = -e * Vel

    Puis on itére sur la liste des contacts tant que toutes les velocité de contact ne vérifie pas la formule précédente.
    Sachant que résoudre un contact en appliquant une impulsion peut annuler la condition précédente.

    En gros dans le cas d'un empilement on va résoudre les impulsions pour le premier contact puis lors de la résolution d'un autre contact on peut invérifier la condition pour le contact précédent. Du coup j'ai peur qu'on se retrouve avec beaucoup trop d'itération.

    (malhereusement je ne peux pas tester cette technique sur le moment).

    Des gens ont déjà utilisé cette technique ou une autre?

Discussions similaires

  1. [XL-2003] Empiler des Tableaux à colonnes différentes
    Par MarcelG dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/11/2010, 14h24
  2. [CS3] empiler des layers dans le même espace
    Par Kidkodak57 dans le forum Dreamweaver
    Réponses: 1
    Dernier message: 06/05/2009, 08h35
  3. Empiler des widgets sur la gauche
    Par haraelendil dans le forum Débuter
    Réponses: 4
    Dernier message: 29/09/2008, 19h46
  4. Empiler des éléments de N vecteurs en Matrice?
    Par maiza_med dans le forum MATLAB
    Réponses: 3
    Dernier message: 28/04/2008, 11h56
  5. [Layout] Empiler des composants...
    Par sozie9372 dans le forum AWT/Swing
    Réponses: 18
    Dernier message: 17/03/2006, 08h22

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