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 :

QuadTree et partionnement


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 QuadTree et partionnement
    Bonjour,
    j'ai lu un article sur gameDev qui explique le fonctionnement des quadtrees.
    Mais par exemple si j'ai les parametres suivants =>

    worldSize = 20X, 20Y

    et que j'ai un objet qui fait 19X,19Y

    La taille minimale d'une feuille devrait etre assez grande pour contenir mon objet.

    Donc le quadtree perd de son interet!

    Comment gerer les gros objets pour les quadTree?

    Merci

  2. #2
    Expert éminent
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Points : 6 812
    Points
    6 812
    Par défaut
    Si je me rappelle bien, tu as plusieurs façon de gérer les gros objets. Cela est fonction de ton projet.

    Soit tu détermines sa position à partir de son centre. Du coup, tu peux voir apparaitre des effets de clipping.

    Soit tu le considères dans toutes les feuilles qu'il chevauche. Dans se cas là, il est souvent traité. Il faut donc rajouter un filtre pour éviter de traiter le même objet sur plusieurs feuilles (flag sur l'objet). Le premier coup que tu le rencontres, tu le traite et tu le flag. Le second coup, sur une autre feuille, comme il est déjà flaggué, tu le skip.
    Mes Tutos DirectX, OpenGL, 3D : http://raptor.developpez.com/

  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
    MErci,
    La deuxieme solution me semble plus simple a mettre en place !

    JE vais faire des recherche sur l'efficacite de chaque methode!

    Merci

  4. #4
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut
    Ou sinon petite astuce si ça ne perturbe pas tes algos, tu considères tes noeuds comme des noeuds-feuilles et tu ne place pas ton objet tout en bas mais plutôt dans un noeud qui l'englobe entièrement plus haut dans l'arbre.

  5. #5
    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
    Oui la solution la plus correcte serait de prendre la bounding box de l'objet et de la placer directement dans chaque nœud approprié comme le souligne oxyde.

    Si l'objet est énorme il est toujours affiché, donc pas besoin de le placer dans tous les sous nœuds, le but étant de découper la complexité, ton arbre sera au final aussi efficace mais plus rapide à construire et prendra moins de place en mémoire. Plus rapide à construire car dès qu'un gros objet sera traité, il n'aura pas besoin d'être à nouveau testé et pas de répétition dans l'arbre, donc moins de place utilisé.

  6. #6
    Expert éminent
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Points : 6 812
    Points
    6 812
    Par défaut
    Tout à fait d'accord avec Ti-R et oxyde. J'avais oublié cette possibilité . C'est effectivement plus facile
    Mes Tutos DirectX, OpenGL, 3D : http://raptor.developpez.com/

  7. #7
    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 pour ton idee oxyde356!

  8. #8
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut
    De rien, mais attention cette façon de faire n'est pas parfaite, imagine que tu as un objet même tout petit en plein centre de ton quadtree, ton algorithme va te le placer à la racine de l'arbre car il n'y aura quelle qui l'englobe complètement même si l'objet est tout petit (faire un schéma pour bien comprendre), mais ce n'est pas du tout optimal car plusieurs feuilles bien plus petites pourraient le contenir.

  9. #9
    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 donc le probleme c'est de choisir la taille d'une feuille la plus optimale possible?

  10. #10
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut
    Pas vraiment, dans le cas d'un petit objet placé en plein centre de ton quadtree il n'y en a pas, le mieux dans ce cas là c'est encore de prendre plusieurs feuilles. Juste pour te dire que tout dépend du cas à traiter. Enfaite quand tu ajoute un objet à ton quadtree, tu te donne une précision maximale à ne pas dépasser (le nombre max de subdivision de ton quadtree). Puis tu subdivise ton quadtree selon la boundingbox de ton objet, il faut subdiviser si un carreau de ton quadtree n'est pas totalement contenu dans la boundingbox de ton objet et si tu n'a pas atteint le nombre max de subdivision.

  11. #11
    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
    tu me dis, qui si l'objet est place en plein milieu du quad tree, il appartient donc a 4 carre qui sont les 4 carre principaux, donc en gros je dois tester les collision de cet objet avec tous les autres?

  12. #12
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut
    J'ai mis à jour ma réponse d'avant tu regarderas ^^

    Oui et non enfaite ce cas là c'est justement un problème, ce n'est carrément pas optimal que ton objet utilise les 4 premiers carreaux c'est pourquoi il faut descendre dans l'arbre pour y chercher un ensemble de feuilles plus adaptés, qui est plus "près" de l'objet (boundingbox de l'ensemble des feuilles sélectionnées bien plus petites mais qui contient la boundingbox de ton objet).

  13. #13
    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 donc par exemple si mon objet est au centre du quadtree je vais donc selectionner 4 feuille pour cet objet, une dans chaque carre principal?


    Du coup c'est pas tres optimale non plus car je dois descendre recursivement dans les 4 grands carre pour trouver chaque feuille!

  14. #14
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut
    Tout dépend tes critères d'optimalité. Si tu cherche la vitesse d'exécution et la taille mémoire minimum en effet ce n'est pas optimal. Mais si tu cherche la précision pour que ton objet soit le mieux "cerné" dans ton quadtree je pense que tu es obligé. De toute façon il ne faut pas voir ça comme "devoir parcourir les 4 carreaux principaux". Tu descend dans un arbre, ces 4 carreaux là tu en aura des similaires à l'étage du dessous qui te poseront le même problème et ainsi de suite. Et si tu ne descend pas en subdivisant les carreaux alors où est l'intérêt d'utiliser un quadtree.

  15. #15
    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 tes infos je vais proceder ainsi pour creer ma classe de quadtree.

    Donc (question idiote) comme c'est un quadTree, les bounding Volume seront des box (OBB, par exemple). Mais je me demande si :

    Temps(creation plus petite sphere englobant ma forme geometrique[welzl]) + Temps(detection collision sphere sphere) < Temps(creation plus petite box englobant ma forme geometrique) + Temps(detection collision box box[TAS]).


    ce qui revient a
    Temps(detection collision sphere sphere) < Temps(mise a jour de OBB) + Temps(detection collision box box[TAS]).
    puisque les sphere sont orientations invariantes.


    Merci de tes infos

  16. #16
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut
    Bah si tu peux pour les boundingbox de ton quadtree utilise plutôt des AABB si celui-ci est aligné sur les axes. Niveau collision je te conseille de d'abord calculer s'il y a une intersection sphère-sphère, si elle passe alors tu fais une AABB(quadtree)-OBB(objet). Une intersection sphère-sphère ne coute quasiment rien et ça te permet d'éviter de faire des calculs d'intersections plus complexes qui s'avéreraient inutiles.

  17. #17
    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 pour toute ces infos

    (ou est le bouton Voter pour tous les messages du sujet )

  18. #18
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut
    Le bouton Résolu peut faire cet office

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème de partionnement de disque !
    Par elhosni dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 10/08/2005, 20h56
  2. Votre avis sur le partionnement
    Par in dans le forum Administration système
    Réponses: 23
    Dernier message: 30/06/2005, 14h13
  3. Quadtree
    Par goutbouyo dans le forum OpenGL
    Réponses: 8
    Dernier message: 10/11/2004, 15h10
  4. Table + Index Partionnées
    Par superfly dans le forum Import/Export
    Réponses: 7
    Dernier message: 18/03/2004, 09h52
  5. Le partionnement sous RedHat
    Par lfournial dans le forum Administration système
    Réponses: 3
    Dernier message: 05/02/2004, 13h58

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