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

Développement 2D, 3D et Jeux Discussion :

Théorie des collisions : Formes 2D simples


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Responsable 2D/3D/Jeux

    Théorie des collisions : Formes 2D simples
    Bonjour à tous,

    Voici le premier tutoriel sur la théorie des collisions. Celui-ci explore les algorithmes de collision les plus simples en détaillant ce que sont les « Axis Aligned Bounding Box », les « Oriented Bounding Box » et les sphères.

    N'hésitez pas à faire des commentaires.

    Bonne lecture
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  2. #2
    Invité
    Invité(e)
    bonjour

    excellent tuto il vise l'essentiel, la simplification du calcule qui conduit a une optimisation des performances , je m'amuse a faire des jeux avec collision 2d et je n'avais pensé au teste avec les 'ou' qui est d'une évidence.

    et un marque pages de plus.

    merci

  3. #3
    Membre expérimenté
    Très bien présenté et lisible ça fait plaisir


    On attends l'ajout des collisions géométrique 2D complexe ( beaucoup plus lourdes mais précise)

  4. #4
    Membre régulier
    Si on veut pinailler :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    bool Collision(AABB box1,AABB box2)
    {
       if((box2.x >= box1.x + box1.w)      // trop à droite
        || (box2.x + box2.w <= box1.x) // trop à gauche
        || (box2.y >= box1.y + box1.h) // trop en bas
        || (box2.y + box2.h <= box1.y))  // trop en haut
              return false; 
       else
              return true; 
    }


    à "optimiser" par :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    bool Collision(AABB box1,AABB box2)
    {
       return ((box2.x >= box1.x + box1.w)       // trop à droite
        || (box2.x + box2.w <= box1.x)           // trop à gauche
        || (box2.y >= box1.y + box1.h)          // trop en bas
        || (box2.y + box2.h <= box1.y));        // trop en haut; 
    }

  5. #5
    Responsable 2D/3D/Jeux

    J'ose croire que le compilateur aura déjà "pinaillé" pour vous.

    Sinon, le vrai pinaillage à faire, sera sur éviter la copie de l'intégralité de la structure lorsque passé en paramètre à la fonction, car là, la copie des deux structures va vraiment faire perdre du temps.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  6. #6
    Membre émérite
    Puis quand on "optimise" c'est mieux quand ça fait la même chose et pas l'inverse :p
    Suivez le développement de Chibis Bomba
    twitter : https://twitter.com/MoD_DiB
    DevBlog : http://moddib.blogspot.fr/

  7. #7
    Membre émérite
    Sympa le tuto. Une remarque, est-ce que ceci ne réduirait pas le nombre théorique de tests ?

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    bool Collision(int curseur_x,int curseur_y,AABB box)
    {
       if (curseur_x < box.x 
        || curseur_x > box.x + box.w
        || curseur_y < box.y 
        || curseur_y > box.y + box.h)
           return false;
       else
           return true;
    }
    Vive les roues en pierre

  8. #8
    Membre du Club
    Question
    Petite question en parcourant rapidement l'article: l'histoire des carrées , pour optimiser ne fallait-il pas faire un décalage vers la gauche pour avoir la valeur? et la droite pour une racine carrée? Je ne me souvient plus

###raw>template_hook.ano_emploi###