Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2760 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Un peu de maths - Calcul du volume englobant d'une spotlight

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Un peu de maths - Calcul du volume englobant d'une spotlight

n°1913122
akalash47
Posté le 09-08-2009 à 12:12:57  profilanswer
 

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.

mood
Publicité
Posté le 09-08-2009 à 12:12:57  profilanswer
 

n°1913168
akalash47
Posté le 09-08-2009 à 15:52:49  profilanswer
 

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?

n°1913174
sgoud
Posté le 09-08-2009 à 17:13:36  profilanswer
 

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?

n°1913232
akalash47
Posté le 09-08-2009 à 21:55:30  profilanswer
 

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 :


(EC=-EA).  
Puis tu calcules le produit vectoriel (DIR,V1) pour avoir le deuxième vecteur de base (EB=-ED).


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!


Message édité par akalash47 le 09-08-2009 à 22:02:21

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Un peu de maths - Calcul du volume englobant d'une spotlight

 

Sujets relatifs
modules de calcul pour python 2.5.2Calcul d'aire: retourne 0!
[Excel] Calcul de moyenne automatiséProbleme calcul : conditions
[VB6] Problème arrondi calcul validité IBANCalcul avec 2 chiffres après la virgule
Factorielle et calcul de tous les ordres possibles de x élémentsdéclencher le calcul d'un fichier excel avec VBA
Problème de calcul de Delta[batch] Calcul d'un fichier txt et envoi vers sql
Plus de sujets relatifs à : Un peu de maths - Calcul du volume englobant d'une spotlight


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR