Chaque objet possède
une méthode de calcul d’intersection propre. Un rayon représente le trajet d’un
photon, et n’a donc pas d’épaisseur. Il est modélisé sous la forme d’une
demi-droite, c’est-à-dire un point de départ Origine et un vecteur directeur VectDir. Les points appartenant à la demi-droite vérifient
donc l’équation :
avec t >0
Intersection avec une sphère
L’une
des premières formes à avoir été implémentée, car étant la plus simple, fut la
sphère. Une sphère possède un centre, un rayon et son équation est de la forme
Pour information, l'équation générale d'une sphère S de centre M et de rayon r est
.
Pour calculer l’intersection, deux approches sont possibles. Soit un calcul algébrique se basant sur les équations mathématiques, soit une approche géométrique. Cette seconde méthode est bien moins gourmande en calcul car elle nécessite moins d’opérations. Nous avons donc naturellement opté pour celle-ci.
où OC et D sont connus
Si , il n’y a pas d’intersection
Sinon, on calcule
Si , pas d’intersection
On a alors deux solutions
On conserve ensuite la valeur la plus petite des deux et strictement positive de t.
Il ne nous reste plus qu’à déterminer les coordonnées du point d’intersection à l’aide de la définition du rayon :
avec > 0.
Un autre paramètre très utile doit être calculé à ce moment-là, il s’agit de la normale à l’objet en ce point. Ici, la normale n’est pas dure à trouver, il suffit de construire le vecteur et de le normaliser.
Rem : A cause des approximations de calcul, une forme
géométrique possède une surface avec certaine épaisseur certes très petite mais
lors de calculs d’intersections, il se peut que l’on retombe sur le point
d’origine du rayon émis (lors d’une réflexion sur une surface par exemple).
C’est pourquoi, on ne conserve que des valeurs de t > 0.01.
Intersection avec un plan
Pour
le plan, une approche calculatoire a été retenue. Un plan est défini par
l’équation .
Sachant que la normale au plan est
Un rayon , tel que , appartient au plan si
D’où
On
en déduit le point d’intersection en réinjectant t dans l’expression du rayon
et la normale au point d’intersection est donnée directement par l’équation du
plan.
Généralisation d’intersection aux quadriques
L’équation générale d’une quadrique est
En injectant les composantes d’un rayon dans celle-ci, nous obtenons une équation du second degré en t. , avec
On en déduit deux solutions
Ensuite la démarche algorithmique à suivre est la suivante :
1. Si , alors la solution est
2. Sinon, on calcule le discriminant . Si celui-ci est négatif, il n’y a pas d’intersection.
3. Si le discriminant est positif, on calcule et . On conserve la valeur positive la plus petite des deux et l’on calcule le point d’intersection .
4. On calcule la normale en ce point en se rappelant que ses composantes sont les dérivées partielles respectives de F en ce point vaut
, soit en développant
On
normalise ce résultat, et l’on retourne si , sinon on inverse .
Intersection avec un cylindre
Un
cylindre étant une quadrique simple, il suffit d’utiliser les résultats
précédents et de les appliquer à ce cas particulier.
Pour des raisons de simplicité de calculs, le moteur ne gère que des cylindres parallèles à l’axe des x , à celui des y ou celui des z. Les cylindres peuvent êtres infinis si on affecte zéro au paramètre hauteur.
Prenons l’exemple d’un cylindre parallèle à x d’équation . Il suffit de suivre la démarche donnée au paragraphe précédent avec , et les autres coefficients nuls.
Dans ce cas, la normale vaudra
Commentaires
Salut,
DenisCorrection d'une étourderie :). L'équation d'une sphère S de centre O(0,0,0) et de rayon r est S(O,r): x^2 + y^2 + z^2 = r^2 (et non x + y + z = r^2, comme tu le mets dans le premier paragraphe).
Et tu pourrais même donner l'équation générale :
S(M,r) = (x-xM)^2 + (y-yM)^2 + (z-zM)^2 = r^2
Encore le critique de service :-)
DenisC'est facile de critiquer, hein ...
Juste un petit mot, il faudrait que tu ressortes tes formules dans une taille un peu plus grande, parce que les '=' se confondent avec les '-' et c'est très génant pour la lecture.
Merci Denis !
Grégory CorgiéJ'apprécie grandement la critique lorsqu'elle est constructive.
Pour la faute, je vais regarder mais ça sent le problème de conversion Word... Enfin...
Pour les formules je suis tout à fait d'accord. Je pense pas tarder à passer le site en 1024*768 parce que là il est en 800*600 mais il ne doit plus y avoir grand monde qui utilise cette résolution.
Je me permets de rebondir sur cette remarque pour placer qu'une sphère n'est rien d'autre qu'une conique. En effet, on retombe sur cette équation en posant
D=E=F=G=H=I=0.
Interessant, non ?