|
Darktib |
Posté le 25 Jan 2009 à 11:56 |

Messages : 4017
|
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)
|
|
SEB |
Posté le 25 Jan 2009 à 10:27 |

Messages : 554
|
Une suggestion bete.. mais on sait jamais... il n'y aurait pas une petite inversion entre l'axe Y et Z ???
|
|
Darktib |
Posté le 25 Jan 2009 à 09:31 |

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

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

Messages : 554
|
Ah XD si désolé XD et ca ne fonctionne pas pour les boite donc aucun point n'est dans le frustum donc ?
|
|
Darktib |
Posté le 24 Jan 2009 à 20:54 |

Messages : 4017
|
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;
}
??
|
|
SEB |
Posté le 24 Jan 2009 à 20:44 |

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

Messages : 4017
|
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 à 19:47 |

Messages : 554
|
Tu pourais peut-etre vérifier si les plans du frustum sont orientés vers l'itérieur? en affichant la normale par exemple?
|
|
Darktib |
Posté le 24 Jan 2009 à 17:43 |

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

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

Messages : 4017
|
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 à 13:26 |

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

Messages : 459
|
je cherche aussi de mon coter
|
|
Darktib |
Posté le 18 Jan 2009 à 18:41 |

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

Messages : 554
|
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
|
|
Darktib |
Posté le 18 Jan 2009 à 16:05 |

Messages : 4017
|
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
|