2010-01-30 3 views
1

Et maintenant, après quelques travaux, je comprends finalement comment le volume de délimitation KDop est créé et comment les collisions sont entrecoupées et j'en ai fait une implémentation fonctionnelle. Maintenant, le problème en est un autre. : DK-Dop collision entre différents K et Volumes

Comment est-ce que je peux m'intersecter (cela doit être possible, ou cela n'aurait aucun sens) 2 K-Dop de valeurs K différentes? (évidemment on sait d'avance quel axe a été utilisé pour créer ces 2 K-Dop.)

Comment est-ce que je peux croiser un DOP6 (AABB) et un DOP14 (coins AABB + coupés)? Ou un DOP14 (coins AABB + coupés) et un DOP26 (AABB + coins coupés + bords coupés)?

La méthode simple (entre KDOP avec le même K) est

public Boolean Intersects(kDOP a, kDOP b) 
     { 
      // TODO : How to do if the K is not the same? 
      for (int i = 0; i < a.K/2; i++) 
       if ((a.Min[i] > b.Max[i]) || (a.Max[i] < b.Min[i])) 
        return false; 
      return true; 
     } 

Une autre question est. Comment faire une intersection entre KDOP et dire une sphère? KDOP et une capsule? KDOP et un OOB? KDOP et un AABB? (Cela devrait être plus facile si nous savons comment faire avec différents K (comme AABB est un DOP6 essentiellement)) Je veux dire quelle est la manière commune de faire l'intersection entre ces structures simples?

Merci beaucoup pour les réponses !!!

EDIT: D'après une recherche sur le réseau, il semble que l'axe de séparation soit la solution, mais je ne trouve aucune information détaillée sur la façon de l'implémenter sur le K-DOP. : P

EDIT 2: Quelqu'un a une implémentation fonctionnelle d'un théorème d'axe de séparation sur KDOP? : |

Répondre

1

Si les K sont d'un ordre différent, exécutez simplement votre boucle i au minimum de a.K/2 ou b.K/2.

+0

C'est aussi simple que ça? XD Je veux dire que l'axe peut être différent dans l'ordre ou dois-je les ordonner pour être les mêmes dans les deux structures? En comparant un KDOP 14 (AABB, Corners) avec un KDOP26 (AABB, Corners, Edges). Devrais-je les avoir dans le même ordre (afin de vérifier AABB avec AABB, Corners avec Corners, et laisser seul les bords?) Qu'en est-il des autres volumes? Comme des sphères et autres? Une idée? – feal87

+0

Une autre note, si je dois les commander comment pourrais-je vérifier un DOP6 (AABB) avec un DOP8 (Corners)? – feal87

+0

Cela ne fonctionne que s'ils sont des sous-ensembles. KDOP6, KDOP14, KDOP26 et si les axes sont dans le même ordre. Le livre Real Time Collision Detection (http://realtimecollisiondetection.net/) a un très bon chapitre sur les intersections entre beaucoup de BB différents. – Greg

Questions connexes