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.