Intersection d'objets 3D

Darktib Message lu Posté le 18 Jan 2009 à 16:05 Bulle
Avatar de Darktib
Membre Ultime

Messages : 4017
GCPoints : 347288
Hello,

J'aimerais savoir comment faire pour connaitre l'intersection d'une boite alignée sur des axes et d'une pyramide (qui peut etre orientée absolument n'importe comment).

Donc ma question peut se résumer en :
_Existe t il une équation permettant de créer une pyramide en 3D (du meme type que (x-a) + (y-b) = r² crée un cercle en 2d), et si oui, quelle est elle ?
_Meme question pour un cube.

Merci d'avance
SEB Message lu Posté le 18 Jan 2009 à 17:12 Bulle
Avatar de SEB
Membre Evolué

Messages : 554
GCPoints : 103313
Je ne pense pas qu'il y ait une equation unique a une ligne du meme genre. mais pluto un truc paramétrique.
En gros peut-etre qu'avec l'equation de chaque plan composant tes différents volumes.

6 equation de plan pour l'AAB et Autant de plan qu'il en faut pour les faces de la piramide
NextGine : 3D games engine
Nombre de lignes actuel : 77683
Darktib Message lu Posté le 18 Jan 2009 à 18:41 Bulle
Avatar de Darktib
Membre Ultime

Messages : 4017
GCPoints : 347288
Une équation paramétrique peut tres bien aller.

Je vais essayer avec tout ce petit tas d'équations...
J'utilise cette intersection entre une aab et un frustrum, et avec la méthode que j'utilise actuellement les résultats sont érronées...
corwin Message lu Posté le 18 Jan 2009 à 19:07 Bulle
Avatar de corwin
Membre Confirmé

Messages : 459
GCPoints : 63647
je cherche aussi de mon coter :wink:
Dernière édition le 18 Jan 2009 à 19:09
SEB Message lu Posté le 19 Jan 2009 à 13:26 Bulle
Avatar de SEB
Membre Evolué

Messages : 554
GCPoints : 103313

Citation :

J'utilise cette intersection entre une aab et un frustrum, et avec la méthode que j'utilise actuellement les résultats sont érronées...



En fait l'algorythme d'intersection AAB, Frustum tu peu le faire via la position des points par rapport aux plans du frustum. Tu peut toujours savoir si un point est devant ou derrière un plan, donc en gros si un objet a tous ses points derrière un des plans du frustum il n'est pas visible, sinon oui

NextGine : 3D games engine
Nombre de lignes actuel : 77683
Darktib Message lu Posté le 19 Jan 2009 à 16:04 Bulle
Avatar de Darktib
Membre Ultime

Messages : 4017
GCPoints : 347288
Classifier une aab par rapport a chaque plan ?

Le probleme c'est que pour l'instant ca ne marche pas...

Enfin, je vais essayer d'ajouter une caméra a mon appli pour pouvoir visionner le frustrum de la premiere caméra, histoire de voir si ce frustrum n'est pas erroné.
SEB Message lu Posté le 19 Jan 2009 à 17:49 Bulle
Avatar de SEB
Membre Evolué

Messages : 554
GCPoints : 103313
oui exactement, en gros un pseudo code donnerais


Code :
function isVisible( Frustum, Box ) {
pour les 6 faces F du frustum
  si( Box.pnt1 derriere F )
    si( Box.pnt2 derriere F )
      si( Box.pnt3 derriere F )
        si( Box.pnt4 derriere F )
          si( Box.pnt5 derriere F )
            si( Box.pnt6 derriere F )
              retourner faux;
finpour

retourner vrai;
}


Sachant que je considère que les plans regardent vers le centre du frustum

Dernière édition le 19 Jan 2009 à 17:50
NextGine : 3D games engine
Nombre de lignes actuel : 77683
Darktib Message lu Posté le 24 Jan 2009 à 17:43 Bulle
Avatar de Darktib
Membre Ultime

Messages : 4017
GCPoints : 347288
marche toujours pas.

J'ai essayé ta méthode, mais de temps en temps des boites du bord de l'écran ne sont pas rendues...
En affichant le frustrum il ne devrait pas y avoir de problemes, mais c'est dur a voir vu que ledit frustrum n'est affiché qu'avec des lignes...

M'enfin, je continue de chercher...

edit : je pense que de toute facon la meilleure solution consiste a utiliser les représentations paramétriques, que malheureusement je ne connait pas...
Dernière édition le 24 Jan 2009 à 17:47
SEB Message lu Posté le 24 Jan 2009 à 19:47 Bulle
Avatar de SEB
Membre Evolué

Messages : 554
GCPoints : 103313
Tu pourais peut-etre vérifier si les plans du frustum sont orientés vers l'itérieur? en affichant la normale par exemple?
NextGine : 3D games engine
Nombre de lignes actuel : 77683
Darktib Message lu Posté le 24 Jan 2009 à 20:30 Bulle
Avatar de Darktib
Membre Ultime

Messages : 4017
GCPoints : 347288
Les cas qui ne passent pas sont quand un bout de la boite est dans le frustrum mais qu'aucun point n'y est...

Les plans sont orientés vers l'extérieur.

En fait pour mieux voir faudrait que je crée vertex par vertex (et index par index...) l'objet représentant le frustrum- ce qui risque d'etre pas tres rapide....
SEB Message lu Posté le 24 Jan 2009 à 20:44 Bulle
Avatar de SEB
Membre Evolué

Messages : 554
GCPoints : 103313
Si les plans sont orientés vers l'extérieur, mon pseudo code ne marchera pas, il faut que les plans soient orientés vers l'intérieur en fait l'idée du pseudo code c'est :

Un cube est invisible Si et seulement Si ses 8 sommets sont derrière un seul des plan
sinon il est visible

donc en inversant la normale peut-etre que cela marcherais dans ton cas
NextGine : 3D games engine
Nombre de lignes actuel : 77683
Darktib Message lu Posté le 24 Jan 2009 à 20:54 Bulle
Avatar de Darktib
Membre Ultime

Messages : 4017
GCPoints : 347288
Il ne suffit pas de changer le pseudo code pour avoir
Code :
function isVisible( Frustum, Box ) {
pour les 6 faces F du frustum
  si( Box.pnt1 devant F )
    si( Box.pnt2 devant F )
      si( Box.pnt3 devant F )
        si( Box.pnt4 devant F )
          si( Box.pnt5 devant F )
            si( Box.pnt6 devant F )
              retourner faux;
finpour

retourner vrai;
}


??
Dernière édition le 24 Jan 2009 à 20:55
SEB Message lu Posté le 24 Jan 2009 à 21:14 Bulle
Avatar de SEB
Membre Evolué

Messages : 554
GCPoints : 103313
Ah XD si désolé XD et ca ne fonctionne pas pour les boite donc aucun point n'est dans le frustum donc ?

NextGine : 3D games engine
Nombre de lignes actuel : 77683
Darktib Message lu Posté le 24 Jan 2009 à 21:50 Bulle
Avatar de Darktib
Membre Ultime

Messages : 4017
GCPoints : 347288
En théorie aucun point...

Je vais tester avec des intersection de lignes en plus, et aussi voir si les frustrums ne déconnent pas un peu...
Darktib Message lu Posté le 25 Jan 2009 à 09:31 Bulle
Avatar de Darktib
Membre Ultime

Messages : 4017
GCPoints : 347288
Bon, il y a du nouveau. J'ai résolu les problemes en faisant des boites immenses (du moins en hauteur), le comble c'est que ca marche et que je comprend pas pourquoi :lol: :proud:

Sinon j'ai remarqué que des boites qui en tout et pour tout devait représenter 2 pixels a l'écran étaient rendues... donc va falloir que je mette du contribution culling en plus du frustrum culling (sachant qu'une boite de moins de rendu = presque 30 fps en plus...)

En tout cas merci pour l'aide :smile:
Dernière édition le 25 Jan 2009 à 09:51
SEB Message lu Posté le 25 Jan 2009 à 10:27 Bulle
Avatar de SEB
Membre Evolué

Messages : 554
GCPoints : 103313
Une suggestion bete.. mais on sait jamais... il n'y aurait pas une petite inversion entre l'axe Y et Z ???
NextGine : 3D games engine
Nombre de lignes actuel : 77683
Darktib Message lu Posté le 25 Jan 2009 à 11:56 Bulle
Avatar de Darktib
Membre Ultime

Messages : 4017
GCPoints : 347288
L'axe Y va vers le haut, et le Z est horizontal.

En tout cas j'ai compris pourquoi il rendait trop de boites de temps en temps en affichant le frustrum (raison citée sur le post précédent)
Répondre
GameCorp - Site d'apprentissage et d'entraide à la création de jeux vidéo.
XHTML Valid 1.1 - Page générée en 0.0383 secondes