triangle pour le bvh, cf fonction bounds() et intersect().
More...
|
| | 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 |
triangle pour le bvh, cf fonction bounds() et intersect().
Definition at line 83 of file tuto_bvh.cpp.
◆ 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) {}
◆ 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() [9/9]
Definition at line 53 of file tuto_is.cpp.
53: TriangleData(data) {}
◆ 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
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.
Vector cross(const Vector &u, const Vector &v)
renvoie le produit vectoriel de 2 vecteurs.
◆ 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 |
◆ 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
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();
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();
77
78 float t=
dot(e2, qvec) * inv_det;
79 if(t > tmax || t < 0) return Hit();
80
81 return Hit(t, u, v, id);
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
66 Vector ac= Vector(Point(a), Point(
c));
67 Vector pvec=
cross(ray.d, ac);
68
69
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
78 Vector tvec(Point(a), ray.o);
79
80
81 float u=
dot(tvec, pvec) * inv_det;
82 if(u < 0.0f || u > 1.0f)
83 return false;
84
85
86 Vector qvec=
cross(tvec, ab);
87
88
89 float v=
dot(ray.d, qvec) * inv_det;
90 if(v < 0.0f || u + v > 1.0f)
91 return false;
92
93
94 rt=
dot(ac, qvec) * inv_det;
95 ru= u;
96 rv= v;
97
98
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 }
◆ e1
◆ e2
◆ id
◆ mesh_id
◆ primitive_id
| int Triangle::primitive_id |
◆ triangle_id
| int Triangle::triangle_id |
The documentation for this struct was generated from the following files: