representation d'un triangle 'geometrique'. More...
#include <PNTriangle.h>
Public Member Functions | |
| PNTriangle () | |
| constructeur par defaut. | |
| PNTriangle (const Point &_a, const Normal &_na, const Point &_b, const Normal &_nb, const Point &_c, const Normal &_nc) | |
| construit un triangle connaissant ses 3 sommets. | |
| ~PNTriangle () | |
| destructeur. | |
| Normal | getUVNormal (const float u, const float v) const |
| renvoie une normale a l'interieur du triangle connaissant ses coordonnees barycentriques. | |
| PNTriangle | transform (const Transform &t) |
| renvoie un pntriangle transforme par 't'. | |
| Triangle | getBaseTriangle () |
| renvoie le triangle geoemtrique | |
| float | getArea () const |
| Normal | getNormal () const |
| Vector | local (const Vector &v) const |
| changement de repere, renvoie le vecteur dans le repere local (bitangent, tangent, normal) | |
| Vector | world (const Vector &v) const |
| changement de repere, renvoie le vecteur dans le repere global. | |
| BBox | getBBox () const |
| bool | Intersect (const Ray &ray, const float htmax, float &rt, float &ru, float &rv) const |
| intersection avec un rayon. | |
| Point | getUVPoint (const float u, const float v) const |
| renvoie un point a l'interieur du triangle connaissant ses coordonnees barycentriques. | |
| float | sampleUniform (Sampler &sampler, Point &p) const |
| choisit un point aleatoirement a la surface du triangle et renvoie la probabilite de l'avoir choisi. | |
| float | pdfUniform (const Point &p) const |
| renvoie la probabilite de choisir le point p aleatoirement. | |
Public Attributes | |
| Normal | na |
| Normal | nb |
| Normal | nc |
| Point | a |
| Point | b |
| Point | c |
| float | area |
representation d'un triangle 'geometrique'.
| Normal gk::PNTriangle::getUVNormal | ( | const float | u, | |
| const float | v | |||
| ) | const [inline] |
renvoie une normale a l'interieur du triangle connaissant ses coordonnees barycentriques.
convention n(u, v)= (1 - u - v) * na + u * nb + v * nc.
| bool gk::Triangle::Intersect | ( | const Ray & | ray, | |
| const float | htmax, | |||
| float & | rt, | |||
| float & | ru, | |||
| float & | rv | |||
| ) | const [inline, inherited] |
intersection avec un rayon.
renvoie faux s'il n'y a pas d'intersection valide, une intersection peut exister mais peut ne pas se trouver dans l'intervalle [0 htmax] du rayon.
renvoie vrai + les coordonnees barycentriques (ru, rv) du point d'intersection + sa position le long du rayon (rt).
convention barycentrique : t(u, v)= (1 - u - v) * a + u * b + v * c
utiliser Mesh::getUVNormal() et Mesh::getUVTexCoord() pour interpoler les attributs du point d'intersection.
ou PNTriangle::getUVNormal().
le parametre htmax permet de trouver tres facilement l'intersection la plus proche de l'origine du rayon.
float t= ray.tmax; // ou t= HUGE_VAL; la plus grande distance le long du rayon. // rechercher le triangle le plus proche de l'origine du rayon for(int i= 0; i < n; i++) { float rt; float ru, rv; if(triangle[i].Intersect(ray, t, rt, ru, rv)) t= rt; }
References gk::Cross(), gk::Ray::d, gk::Dot(), and gk::Ray::o.
| Point gk::Triangle::getUVPoint | ( | const float | u, | |
| const float | v | |||
| ) | const [inline, inherited] |
renvoie un point a l'interieur du triangle connaissant ses coordonnees barycentriques.
convention p(u, v)= (1 - u - v) * a + u * b + v * c
| float gk::Triangle::pdfUniform | ( | const Point & | p | ) | const [inline, inherited] |
renvoie la probabilite de choisir le point p aleatoirement.
remarque: le point doit appartenir au triangle.
1.6.3