Un peu de maths - Calcul du volume englobant d'une spotlight - C++ - Programmation
Marsh Posté le 09-08-2009 à 15:52:49
Houlà faut croire que tout le monde passe son chemin!
Bon je crois que j'ai trouvé une autre solution, plus simple, mais j'aimerais bien que quelqu'un confirme ma méthode:
- Plutôt que de chercher l'intersection plan-sphere, je calcule plutôt un vecteur directeur à mon plan. Donc je prends un point Q quelconque du plan tel que a*xQ + b*yQ + c*zQ + d = 0 et Q != E.
Si a != 0 je lui donne disons yQ = yE + offset, zQ = zE et je calcule xQ= - ( b*yQ + c*zQ + d ) / a.
Sinon j'essaye la même chose (b != 0, c != 0) pour tomber sur un point valide.
Maintenant j'ai mon vecteur EQ directeur, que je normalize et multiplie par coneRadius. Mon point A est donc E + ce vecteur.
Après un cross product et 2 inversions, je peux trouver les points B,C et D.
Ca vous semble bon?
Marsh Posté le 09-08-2009 à 17:13:36
Oui c'est bon.
Mais ce n'est pas très bien exprimé.
Tu as un vecteur direction (X,Y,Z). Il te suffit de trouver une perpendiculaire (par exemple [-Y,X,0]) normalisée correctement pour avoir un vecteur de base EA. (EC=-EA).
Puis tu calcules le produit vectoriel (DIR,V1) pour avoir le deuxième vecteur de base (EB=-ED).
Mais j'ai cru au départ que tu voulais simplement calculer le volume de la pyramide (OABCD?) donc pourquoi t'embêter à calculer les coordonnées das 4 sommets de base?
Marsh Posté le 09-08-2009 à 21:55:30
Non l'idée est justement de connaitre les coordonnées monde de chaque vertex de mon volume, ainsi je peux ensuite les projeter en screen space et calculer la zone réellement couverte à l'écran...et donc profiter du scissor test lors de la passe d'éclairage.
Citation : |
Effectivement, c'est ce dont je parlais (cross product + 2 inversions). Désolé si j'ai été un peu confus dans mes explications.
Oui il y a peut-être plus simple pour trouver un vecteur perpendiculaire, néanmoins j'ai du mal à imaginer qu'en mettant Z à 0 j'obtienne le bon résultat dans tous les cas, mais je vais essayer ça.
Merci de ton aide!
Marsh Posté le 09-08-2009 à 12:12:57
Bonjour,
Je fais un peu de deferred shading et je cherche à calculer un volume englobant très simple autour de ma spotlight. Elle est caractérisée par un angle max d'ouverture Phi, un vecteur direction Dir, une position Pos et une portée max Range (tous dans l'espace monde).
Le volume en question n'est ni plus ni moins qu'un prisme à 5 vertices: le sommet est la source Pos, les autres (A,B,C,D) forment la base, qui englobe le disque terminal (càd l'ouverture max), dont le centre est donc E = Pos + Dir * Range.
Je cherche à calculer les coordonnées monde de A,B,C,D.
En théorie c'est simple: A,B,C,D appartiennent tous à un plan P défini par son vecteur normal Dir et sa distance d à l'origine, soit celle de E.
Ils appartiennent également à une sphere S de centre E et de rayon r que j'ai calculé.
Je veux donc trouver l'équation de l'intersection de P et de S afin de déterminer les coordonnées d'un point quelconque (ce sera A) sur le disque résultant. Il sera ensuite facile de trouver les coordonnées des trois autres.
Bref on a:
a*xA + b*yA + c*zA + d = 0 avec a,b,c,d connus.
(xE-xA)² + (yE-yA)² + (zE-zA)² = r² avec xE, yE, zE et r connus.
Et là je sèche, ça fait seulement 2 équations pour trois inconnues, faut-il prendre une valeur au pif pour xA?
Est-ce quelqu'un peu m'expliquer comment trouver ces coordonnées?
Merci d'avance.