| Menu principal | bas de page |
III/ Elimination des faces cachées :
Jusqu’à présent, nous avons obtenu une représentation des objets de type " Fil de fer " : tous les segments de l’espace 3D projeté sont visibles, mêmes ceux devant normalement être invisibles du fait de l’opacité de certains objets (les murs d’une maison sont opaques et ne laissent pas voir le côté opposé de cette dernière), ainsi que ceux cachés par d’autres objets.
On cherchera donc à éliminer, dans un premier temps, les faces appartenant à un objet, cachées par lui-même (polygone convexe uniquement). Puis, on verra comment gérer l’élimination des faces d’un objet cachées par d’autres objets (polygone concave).
1) Cas des polygones convexes :
a) Principe :
La procédure à suivre est très simple. Il s’agit tout d’abord de déterminer, pour chaque face, un vecteur normal. On le calculera grâce au produit vectoriel de 2 vecteurs portés par les arrêtes de la face. Ce qui nous intéresse n’est, non pas la norme, mais la direction et le sens.
b) Rappels mathématiques concernant le produit vectoriel :
On considère 2 vecteurs
(Xa, Ya, Za) et
(Xb, Yb, Zb). Le produit vectoriel de
par
est un vecteur
, de normal au plan défini par
et
, de sorte que (
,
,
) soit une base directe. | Ses coordonnées sont | ![]() |
Xv = Ya * Zb - Za * Yb |
| Yv = Za * Xb - Xa * Zb | ||
| Zv = Xa * Yb - Ya * Xb |
|| * ||
|| * sin(
,
)![]() |
![]() |
|
| Sens trigonométrique | Sens horlogique |
c) Rappels mathématiques sur le produit scalaire :
On considère une nouvelle fois 2 vecteurs
(Xa, Ya, Za) et <
(Xb, Yb, Zb). Le produit scalaire de
et
est un nombre réèl égal à ||
|| * ||
|| * cos (
,
). Dans un repère orthonormal, il peut encore s’écrire 
= Xa * Xb + Ya * Yb + Za * Zb.
Puisque les normes sont positives, le signe du produit scalaire est déterminé par le signe de cos(
,
).![]() |
Si - /2 < ( , ) < 0 ou 0 < ( , ) < /2 alors ![]() ![]() > 0 |
Si /2 < ( , ) < ou < ( , ) < - /2 alors ![]() ![]() <0 |
) = Cos(
)
R, on ramène tous ces cas aux suivants :
- Si 0 < |(
,
)| <
/2 alors 

>0
- Si
/2 < |(
,
)| <
alors 

<0
d) Calcul du vecteur vision :
Le vecteur vision est tout simplement un vecteur joignant l’oeil à n’importe quel sommet de la face.
e) Test de visibilité :
et
. On va détailler la suite des opérations enconsidérant que la déclaration des sommets s’est faite dans le sens horlogique. Deux cas sont possibles :
- Le produit scalaire 

est positif. La face est visible.
- Le produit scalaire 

est négatif. La face est invisible.![]() |
![]() |
|||
0 < |( , )| < /2 |
/2 < |( , )| < ![]() |
![]() |
![]() |
|
| Maison avec faces cachées | Cheminée avec les faces cachées |
| Fig. 1 | Fig. 2 | |
![]() |
![]() |
|
| Association des objets convexes avec élimination des parties cachées en un objet concave |
Vus réaliste de la maison et de sa cheminée (objet concave) |
|
| Résultat peu satisfaisant | C'est le résultat que l'on recherche |
b) Principe :
Cette fois-ci, on ne base pas sur un calcul mathématique mais sur une simple constation logique pour déterminer quelles faces sont cachées : les plus proches de l’oeil recouvrent les autres. On va donc procéder, dans l’ordre :
- Au calcul de la distance, selon l’axe Z, séparant l’oeil et chaque face.
- Au tri dans l’ordre décroissant des faces selon la distance précédemment calculée.
- A l’affichage des faces dans l’ordre du tableau, en les remplissant avec une texture, recouvrant les textures des faces antérieures.![]() |
Page précédente |
|
Page suivante |
![]() |