
/*! \addtogroup pipeline_c mini pipeline graphique

cf pipeline.cpp

la solution présentée dans \ref intro3d fonctionne correctement dans les cas simples lorsque tous les triangles sont devant la 
camera. un grand triangle dont les sommets ne sont pas visibles dans l'image mais dont l'interieur est visible ne sera pas 
dessiné... le test de visibilité du triangle n'est pas suffisant.


sans rentrer dans les détails, la projection utilisée est _juste_ une transformation comme une autre, et les points derrière
la caméra se projettent aussi sur l'image... il faut donc trouver une approche différente qui ne fait pas de projection.

les tests d'inclusion des pixels se font en 2d, dans le plan image, après la projection. si on ne veut pas calculer la projection, 
il faut faire un test équivalent en 3d, avant la projection.

la solution est logique, au lieu de tester un pixel par rapport à un triangle, et de calculer des aires, il faut tester un point 3d 
par rapport à un... tetrahèdre et calculer des volumes.

_remarque :_ pour les curieux, toutes les explications sont dans cet [article](http://cg.ivd.kit.edu/publications/p2012/3dr/gi2012.pdf)

le test d'inclusion d'un pixel p dans un triangle abc calcule les aires signées des triangles pab, pbc, pca. ce qui permet de vérifier 
que le pixel se trouve du "bon" coté de chaque arête du triangle.

pour le test 3d, la camera est le sommet du tetrahedre, e, et sa base est le triangle abc. le test d'inclusion du point p se transforme 
en calcul du volume signé des tetrahedres formés par le point p et les faces abc, eba ecb, eac. s'ils sont tous du même signe, p à 
est l'interieur du volume eabc, et le pixel fait parti du triangle. c'est le même test qu'avec l'aire, le volume sera positif si p se trouve
du "bon" coté de chaque face du tetrahedre.

 */
