lu,
voici le principe que j' utilise pour les intersections point/boîte :
Je passe le point à tester dans les coordonées de la boîte puis je regarde si il est unitaire dans ces coordonées.
Détails :
M est la matrix de monde ( world matrix ) de la boîte, C le centre de la boîte et P le point à tester.
D' abord je récupére les vecteurs locaux de la boite
v1(M[1,1],M[2,1],M[3,1])
v2(M[1,2],M[2,2],M[3,2])
v3(M[1,3],M[2,3],M[3,3])
P' est la différence entre P et le centre de la boîte :
P' = P-C. C 'est P dans la base (C,v1,v2,v3)
Il faut savoir aussi que à la base mes boîtes sont des cubes unitaires donc les vecteurs v1,v2 et v3 définissent bien la taille de la boîte.
le test d' unitarité ( ? ): je vais regarder si chacune des composantes de P' est inférieure à son vecteur respectif.
Pour cela faut il encore que je récupere ces coordonées -> ce sont les projections de P' sur chacun des axes.
donc si P' est dans la boîte on a pour chacun des axes :
||proj(P'surVx)|| <= ||Vx||
Cette formule n 'est pas super pratique alors je multiplie chaque côté par ||Vx|| ( forcement positif )
||Vx||*||proj(P'surVx)|| <= Vx²
grâce a la magie du produit scalaire :
Vx.P' <= Vx²
Voila, j'aimerais savoir si il existe des meilleurs méthodes mais surtout pourquoi sa marche pas.
++