|
Darktib
|
Posté le 18 Jan 2009 à 16:05
|
|

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
|
Posté le 18 Jan 2009 à 17:12
|
|

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
|
Posté le 18 Jan 2009 à 18:41
|
|

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
|
Posté le 18 Jan 2009 à 19:07
|
|

Messages : 459
GCPoints : 63647
|
je cherche aussi de mon coter
Dernière édition le 18 Jan 2009 à 19:09
|
|
SEB
|
Posté le 19 Jan 2009 à 13:26
|
|

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
|
Posté le 19 Jan 2009 à 16:04
|
|

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
|
Posté le 19 Jan 2009 à 17:49
|
|

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
|
Posté le 24 Jan 2009 à 17:43
|
|

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
|
Posté le 24 Jan 2009 à 19:47
|
|

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
|
Posté le 24 Jan 2009 à 20:30
|
|

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
|
Posté le 24 Jan 2009 à 20:44
|
|

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
|
Posté le 24 Jan 2009 à 20:54
|
|

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
|
Posté le 24 Jan 2009 à 21:14
|
|

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
|
Posté le 24 Jan 2009 à 21:50
|
|

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
|
Posté le 25 Jan 2009 à 09:31
|
|

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
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
Dernière édition le 25 Jan 2009 à 09:51
|
|
SEB
|
Posté le 25 Jan 2009 à 10:27
|
|

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
|
Posté le 25 Jan 2009 à 11:56
|
|

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)
|