gKit2 light
Loading...
Searching...
No Matches
Triangle Struct Reference

triangle pour le bvh, cf fonction bounds() et intersect(). More...

Inheritance diagram for Triangle:

Public Member Functions

 Triangle (const TriangleData &data, const int _id)
void intersect (RayHit &ray) const
BBox bounds () const
 Triangle (const TriangleData &data, const int _id)
Hit intersect (const Ray &ray, const float htmax) const
BBox bounds () const
 Triangle (const vec3 &a, const vec3 &b, const vec3 &c, const int _mesh_id, const int _primitive_id, const int _id)
Hit intersect (const Ray &ray, const float htmax) const
BBox bounds () const
 Triangle (const vec3 &a, const vec3 &b, const vec3 &c, const int _mesh_id, const int _primitive_id, const int _id)
Hit intersect (const Ray &ray, const float htmax) const
BBox bounds () const
 Triangle (const TriangleData &data, const int _id)
void intersect (RayHit &ray) const
BBox bounds () const
 Triangle (const vec3 &a, const vec3 &b, const vec3 &c, const int _mesh_id, const int _primitive_id, const int _id)
Hit intersect (const Ray &ray, const float htmax) const
 Triangle (const TriangleData &data, const int _id)
Hit intersect (const Ray &ray, const float tmax) const
 Triangle (const TriangleData &data)
bool intersect (const Ray &ray, const float htmax, float &rt, float &ru, float &rv) const
Point point (const float u, const float v) const
Vector normal (const float u, const float v) const

Public Attributes

Point p
Vector e1
Vector e2
int id
int mesh_id
int primitive_id
int triangle_id
Public Attributes inherited from TriangleData
vec3 a
vec3 b
vec3 c
 positions
vec3 na
vec3 nb
vec3 nc
 normales
vec2 ta
vec2 tb
vec2 tc
 texcoords

Detailed Description

triangle pour le bvh, cf fonction bounds() et intersect().

Definition at line 83 of file tuto_bvh.cpp.

Constructor & Destructor Documentation

◆ Triangle() [1/9]

Triangle::Triangle ( const TriangleData & data,
const int _id )
inline

Definition at line 89 of file tuto_bvh.cpp.

89: p(data.a), e1(Vector(data.a, data.b)), e2(Vector(data.a, data.c)), id(_id) {}

◆ Triangle() [2/9]

Triangle::Triangle ( const TriangleData & data,
const int _id )
inline

Definition at line 260 of file tuto_bvh2.cpp.

260: p(data.a), e1(Vector(data.a, data.b)), e2(Vector(data.a, data.c)), id(_id) {}

◆ Triangle() [3/9]

Triangle::Triangle ( const vec3 & a,
const vec3 & b,
const vec3 & c,
const int _mesh_id,
const int _primitive_id,
const int _id )
inline

Definition at line 267 of file tuto_bvh2_gltf.cpp.

267 :
268 p(a), e1(Vector(a, b)), e2(Vector(a, c)),
269 mesh_id(_mesh_id), primitive_id(_primitive_id), triangle_id(_id) {}
vec3 c
positions
Definition mesh.h:96

◆ Triangle() [4/9]

Triangle::Triangle ( const vec3 & a,
const vec3 & b,
const vec3 & c,
const int _mesh_id,
const int _primitive_id,
const int _id )
inline

Definition at line 267 of file tuto_bvh2_gltf_brdf.cpp.

267 :
268 p(a), e1(Vector(a, b)), e2(Vector(a, c)),
269 mesh_id(_mesh_id), primitive_id(_primitive_id), triangle_id(_id) {}

◆ Triangle() [5/9]

Triangle::Triangle ( const TriangleData & data,
const int _id )
inline

Definition at line 78 of file tuto_englobant.cpp.

78: p(data.a), e1(Vector(data.a, data.b)), e2(Vector(data.a, data.c)), id(_id) {}

◆ Triangle() [6/9]

Triangle::Triangle ( const vec3 & a,
const vec3 & b,
const vec3 & c,
const int _mesh_id,
const int _primitive_id,
const int _id )
inline

Definition at line 54 of file tuto_ray_gltf.cpp.

54 :
55 p(a), e1(Vector(a, b)), e2(Vector(a, c)),
56 mesh_id(_mesh_id), primitive_id(_primitive_id), triangle_id(_id) {}

◆ Triangle() [7/9]

Triangle::Triangle ( const TriangleData & data,
const int _id )
inline

Definition at line 54 of file tuto_rayons.cpp.

54: p(data.a), e1(Vector(data.a, data.b)), e2(Vector(data.a, data.c)), id(_id) {}

◆ Triangle() [8/9]

Triangle::Triangle ( )
inline

Definition at line 52 of file tuto_is.cpp.

52: TriangleData() {}

◆ Triangle() [9/9]

Triangle::Triangle ( const TriangleData & data)
inline

Definition at line 53 of file tuto_is.cpp.

53: TriangleData(data) {}

Member Function Documentation

◆ intersect() [1/8]

void Triangle::intersect ( RayHit & ray) const
inline

Definition at line 98 of file tuto_bvh.cpp.

99 {
100 Vector pvec= cross(ray.d, e2);
101 float det= dot(e1, pvec);
102
103 float inv_det= 1 / det;
104 Vector tvec(p, ray.o);
105
106 float u= dot(tvec, pvec) * inv_det;
107 if(u < 0 || u > 1) return;
108
109 Vector qvec= cross(tvec, e1);
110 float v= dot(ray.d, qvec) * inv_det;
111 if(v < 0 || u + v > 1) return;
112
113 float t= dot(e2, qvec) * inv_det;
114 if(t < 0 || t > ray.t) return;
115
116 // touche !!
117 ray.t= t;
118 ray.triangle_id= id;
119 ray.u= u;
120 ray.v= v;
121 }
float dot(const Vector &u, const Vector &v)
renvoie le produit scalaire de 2 vecteurs.
Definition vec.cpp:181
Vector cross(const Vector &u, const Vector &v)
renvoie le produit vectoriel de 2 vecteurs.
Definition vec.cpp:173

◆ bounds() [1/5]

BBox Triangle::bounds ( ) const
inline

Definition at line 123 of file tuto_bvh.cpp.

124 {
125 BBox box(p);
126 return box.insert(p+e1).insert(p+e2);
127 }

◆ intersect() [2/8]

Hit Triangle::intersect ( const Ray & ray,
const float htmax ) const
inline

Definition at line 269 of file tuto_bvh2.cpp.

270 {
271 Vector pvec= cross(ray.d, e2);
272 float det= dot(e1, pvec);
273
274 float inv_det= 1 / det;
275 Vector tvec(p, ray.o);
276
277 float u= dot(tvec, pvec) * inv_det;
278 if(u < 0 || u > 1) return Hit();
279
280 Vector qvec= cross(tvec, e1);
281 float v= dot(ray.d, qvec) * inv_det;
282 if(v < 0 || u + v > 1) return Hit();
283
284 float t= dot(e2, qvec) * inv_det;
285 if(t < 0 || t > htmax) return Hit();
286
287 return Hit(t, u, v, id);
288 }

◆ bounds() [2/5]

BBox Triangle::bounds ( ) const
inline

Definition at line 290 of file tuto_bvh2.cpp.

291 {
292 BBox box(p);
293 return box.insert(p+e1).insert(p+e2);
294 }

◆ intersect() [3/8]

Hit Triangle::intersect ( const Ray & ray,
const float htmax ) const
inline

Definition at line 278 of file tuto_bvh2_gltf.cpp.

279 {
280 Vector pvec= cross(ray.d, e2);
281 float det= dot(e1, pvec);
282
283 float inv_det= 1 / det;
284 Vector tvec(p, ray.o);
285
286 float u= dot(tvec, pvec) * inv_det;
287 if(u < 0 || u > 1) return Hit();
288
289 Vector qvec= cross(tvec, e1);
290 float v= dot(ray.d, qvec) * inv_det;
291 if(v < 0 || u + v > 1) return Hit();
292
293 float t= dot(e2, qvec) * inv_det;
294 if(t < 0 || t > htmax) return Hit();
295
296 return Hit(t, u, v, mesh_id, primitive_id, triangle_id);
297 }

◆ bounds() [3/5]

BBox Triangle::bounds ( ) const
inline

Definition at line 299 of file tuto_bvh2_gltf.cpp.

300 {
301 BBox box(p);
302 return box.insert(p+e1).insert(p+e2);
303 }

◆ intersect() [4/8]

Hit Triangle::intersect ( const Ray & ray,
const float htmax ) const
inline

Definition at line 278 of file tuto_bvh2_gltf_brdf.cpp.

279 {
280 Vector pvec= cross(ray.d, e2);
281 float det= dot(e1, pvec);
282
283 float inv_det= 1 / det;
284 Vector tvec(p, ray.o);
285
286 float u= dot(tvec, pvec) * inv_det;
287 if(u < 0 || u > 1) return Hit();
288
289 Vector qvec= cross(tvec, e1);
290 float v= dot(ray.d, qvec) * inv_det;
291 if(v < 0 || u + v > 1) return Hit();
292
293 float t= dot(e2, qvec) * inv_det;
294 if(t < 0 || t > htmax) return Hit();
295
296 return Hit(t, u, v, mesh_id, primitive_id, triangle_id);
297 }

◆ bounds() [4/5]

BBox Triangle::bounds ( ) const
inline

Definition at line 299 of file tuto_bvh2_gltf_brdf.cpp.

300 {
301 BBox box(p);
302 return box.insert(p+e1).insert(p+e2);
303 }

◆ intersect() [5/8]

void Triangle::intersect ( RayHit & ray) const
inline

Definition at line 87 of file tuto_englobant.cpp.

88 {
89 Vector pvec= cross(ray.d, e2);
90 float det= dot(e1, pvec);
91
92 float inv_det= 1 / det;
93 Vector tvec(p, ray.o);
94
95 float u= dot(tvec, pvec) * inv_det;
96 if(u < 0 || u > 1) return;
97
98 Vector qvec= cross(tvec, e1);
99 float v= dot(ray.d, qvec) * inv_det;
100 if(v < 0 || u + v > 1) return;
101
102 float t= dot(e2, qvec) * inv_det;
103 if(t < 0 || t > ray.t) return;
104
105 // touche !!
106 ray.t= t;
107 ray.triangle_id= id;
108 ray.u= u;
109 ray.v= v;
110 }

◆ bounds() [5/5]

BBox Triangle::bounds ( ) const
inline

Definition at line 112 of file tuto_englobant.cpp.

113 {
114 BBox box(p);
115 return box.insert(p+e1).insert(p+e2);
116 }

◆ intersect() [6/8]

Hit Triangle::intersect ( const Ray & ray,
const float htmax ) const
inline

Definition at line 65 of file tuto_ray_gltf.cpp.

66 {
67 Vector pvec= cross(ray.d, e2);
68 float det= dot(e1, pvec);
69
70 float inv_det= 1 / det;
71 Vector tvec(p, ray.o);
72
73 float u= dot(tvec, pvec) * inv_det;
74 if(u < 0 || u > 1) return Hit();
75
76 Vector qvec= cross(tvec, e1);
77 float v= dot(ray.d, qvec) * inv_det;
78 if(v < 0 || u + v > 1) return Hit();
79
80 float t= dot(e2, qvec) * inv_det;
81 if(t < 0 || t > htmax) return Hit();
82
83 return Hit(t, u, v, mesh_id, primitive_id, triangle_id);
84 }

◆ intersect() [7/8]

Hit Triangle::intersect ( const Ray & ray,
const float tmax ) const
inline

Definition at line 63 of file tuto_rayons.cpp.

64 {
65 Vector pvec= cross(ray.d, e2);
66 float det= dot(e1, pvec);
67
68 float inv_det= 1 / det;
69 Vector tvec(p, ray.o);
70
71 float u= dot(tvec, pvec) * inv_det;
72 if(u < 0 || u > 1) return Hit(); // pas d'intersection
73
74 Vector qvec= cross(tvec, e1);
75 float v= dot(ray.d, qvec) * inv_det;
76 if(v < 0 || u + v > 1) return Hit(); // pas d'intersection
77
78 float t= dot(e2, qvec) * inv_det;
79 if(t > tmax || t < 0) return Hit(); // pas d'intersection
80
81 return Hit(t, u, v, id); // p(u, v)= (1 - u - v) * a + u * b + v * c
82 }

◆ intersect() [8/8]

bool Triangle::intersect ( const Ray & ray,
const float htmax,
float & rt,
float & ru,
float & rv ) const
inline

Definition at line 63 of file tuto_is.cpp.

64 {
65 /* begin calculating determinant - also used to calculate U parameter */
66 Vector ac= Vector(Point(a), Point(c));
67 Vector pvec= cross(ray.d, ac);
68
69 /* if determinant is near zero, ray lies in plane of triangle */
70 Vector ab= Vector(Point(a), Point(b));
71 float det= dot(ab, pvec);
72 if(det > -EPSILON && det < EPSILON)
73 return false;
74
75 float inv_det= 1.0f / det;
76
77 /* calculate distance from vert0 to ray origin */
78 Vector tvec(Point(a), ray.o);
79
80 /* calculate U parameter and test bounds */
81 float u= dot(tvec, pvec) * inv_det;
82 if(u < 0.0f || u > 1.0f)
83 return false;
84
85 /* prepare to test V parameter */
86 Vector qvec= cross(tvec, ab);
87
88 /* calculate V parameter and test bounds */
89 float v= dot(ray.d, qvec) * inv_det;
90 if(v < 0.0f || u + v > 1.0f)
91 return false;
92
93 /* calculate t, ray intersects triangle */
94 rt= dot(ac, qvec) * inv_det;
95 ru= u;
96 rv= v;
97
98 // ne renvoie vrai que si l'intersection est valide (comprise entre tmin et tmax du rayon)
99 return (rt < htmax && rt > EPSILON);
100 }

◆ point()

Point Triangle::point ( const float u,
const float v ) const
inline

renvoie un point a l'interieur du triangle connaissant ses coordonnees barycentriques. convention p(u, v)= (1 - u - v) * a + u * b + v * c

Definition at line 104 of file tuto_is.cpp.

105 {
106 float w= 1.f - u - v;
107 return Point(Vector(a) * w + Vector(b) * u + Vector(c) * v);
108 }

◆ normal()

Vector Triangle::normal ( const float u,
const float v ) const
inline

renvoie une normale a l'interieur du triangle connaissant ses coordonnees barycentriques. convention p(u, v)= (1 - u - v) * a + u * b + v * c

Definition at line 112 of file tuto_is.cpp.

113 {
114 float w= 1.f - u - v;
115 return Vector(na) * w + Vector(nb) * u + Vector(nc) * v;
116 }
vec3 nc
normales
Definition mesh.h:97

Member Data Documentation

◆ p

Point Triangle::p

Definition at line 85 of file tuto_bvh.cpp.

◆ e1

Vector Triangle::e1

Definition at line 86 of file tuto_bvh.cpp.

◆ e2

Vector Triangle::e2

Definition at line 86 of file tuto_bvh.cpp.

◆ id

int Triangle::id

Definition at line 87 of file tuto_bvh.cpp.

◆ mesh_id

int Triangle::mesh_id

Definition at line 263 of file tuto_bvh2_gltf.cpp.

◆ primitive_id

int Triangle::primitive_id

Definition at line 264 of file tuto_bvh2_gltf.cpp.

◆ triangle_id

int Triangle::triangle_id

Definition at line 265 of file tuto_bvh2_gltf.cpp.


The documentation for this struct was generated from the following files: