| cone.h |
calculate quadratic equation to solve |
13686 |
- |
| coneline_intersector.h |
move ray origin closer to make calculations numerically stable |
10004 |
- |
| conelinei_intersector.h |
|
6045 |
- |
| curve_intersector.h |
|
4514 |
- |
| curve_intersector_distance.h |
transform control points into ray space |
4912 |
- |
| curve_intersector_oriented.h |
|
18296 |
- |
| curve_intersector_precalculations.h |
|
1276 |
- |
| curve_intersector_ribbon.h |
calculate squared distance of point p0 to line p1->p2 |
9087 |
- |
| curve_intersector_sweep.h |
error of curve evaluations is propertional to largest coordinate |
15113 |
- |
| curve_intersector_virtual.h |
|
49049 |
- |
| curve_intersector_virtual_4i.cpp |
|
2292 |
- |
| curve_intersector_virtual_4i_mb.cpp |
|
2330 |
- |
| curve_intersector_virtual_4v.cpp |
|
2292 |
- |
| curve_intersector_virtual_8i.cpp |
|
2868 |
- |
| curve_intersector_virtual_8i_mb.cpp |
|
2906 |
- |
| curve_intersector_virtual_8v.cpp |
|
2868 |
- |
| curveNi.h |
Returns maximum number of stored primitives |
9736 |
- |
| curveNi_intersector.h |
|
24977 |
- |
| curveNi_mb.h |
Returns maximum number of stored primitives |
13725 |
- |
| curveNi_mb_intersector.h |
|
25131 |
- |
| curveNv.h |
Returns maximum number of stored primitives |
3460 |
- |
| curveNv_intersector.h |
|
6852 |
- |
| cylinder.h |
calculate quadratic equation to solve |
8389 |
- |
| disc_intersector.h |
|
8078 |
- |
| disci_intersector.h |
|
11695 |
- |
| filter.h |
|
6495 |
- |
| grid_intersector.h |
! Intersect a ray with the primitive. |
3914 |
- |
| grid_soa.cpp |
the generate loops need padded arrays, thus first store into these temporary arrays |
9192 |
- |
| grid_soa.h |
! GridSOA constructor |
11803 |
- |
| grid_soa_intersector_packet.h |
! Intersect a ray with the primitive. |
21564 |
- |
| grid_soa_intersector1.h |
! Intersect a ray with the primitive. |
9245 |
- |
| instance.h |
primitive supports multiple time segments |
2363 |
- |
| instance_intersector.cpp |
Push an instance to the stack. |
14055 |
- |
| instance_intersector.h |
|
3346 |
- |
| intersector_epilog.h |
ray mask test |
32370 |
- |
| intersector_iterators.h |
PrecalculationsK& pre, |
7184 |
- |
| line_intersector.h |
transform end points into ray space |
6310 |
- |
| linei.h |
Virtual interface to query information about the line segment type |
31600 |
- |
| linei_intersector.h |
|
5728 |
- |
| object.h |
primitive supports multiple time segments |
2436 |
- |
| object_intersector.h |
perform ray mask test |
4528 |
- |
| plane.h |
|
1704 |
- |
| pointi.h |
Virtual interface to query information about the line segment type |
15838 |
- |
| primitive.h |
! returns name of this primitive type |
1517 |
- |
| primitive4.cpp |
Curve4v ************************* |
8706 |
- |
| primitive8.cpp |
Curve8v ************************* |
3613 |
- |
| quad_intersector.h |
! Intersects a ray with a quad with backface culling
enabled. The quad v0,v1,v2,v3 is split into two triangles
v0,v1,v3 and v2,v3,v1. The edge v1,v2 decides which of the two
triangles gets intersected. |
2955 |
- |
| quad_intersector_moeller.h |
----------------------------- |
18401 |
- |
| quad_intersector_pluecker.h |
! Modified Pluecker ray/triangle intersector. The test first shifts
the ray origin into the origin of the coordinate system and then
uses Pluecker coordinates for the intersection. Due to the shift,
the Pluecker coordinate calculation simplifies and the tests get
numerically stable. The edge equations are watertight along the
edge for neighboring triangles. |
18196 |
- |
| quadi.h |
Stores M quads from an indexed face set |
18076 |
- |
| quadi_intersector.h |
! Intersects M quads with 1 ray |
15942 |
- |
| quadv.h |
Stores the vertices of M quads in struct of array layout |
6261 |
- |
| quadv_intersector.h |
! Intersects M quads with 1 ray |
7847 |
- |
| roundline_intersector.h |
This file implements the intersection of a ray with a round linear
curve segment. We define the geometry of such a round linear curve
segment from point p0 with radius r0 to point p1 with radius r1
using the cone that touches spheres p0/r0 and p1/r1 tangentially
plus the sphere p1/r1. We denote the tangentially touching cone from
p0/r0 to p1/r1 with cone(p0,r0,p1,r1) and the cone plus the ending
sphere with cone_sphere(p0,r0,p1,r1).
For multiple connected round linear curve segments this construction
yield a proper shape when viewed from the outside. Using the
following CSG we can also handle the interiour in most common cases:
round_linear_curve(pl,rl,p0,r0,p1,r1,pr,rr) =
cone_sphere(p0,r0,p1,r1) - cone(pl,rl,p0,r0) - cone(p1,r1,pr,rr)
Thus by subtracting the neighboring cone geometries, we cut away
parts of the center cone_sphere surface which lie inside the
combined curve. This approach works as long as geometry of the
current cone_sphere penetrates into direct neighbor segments only,
and not into segments further away.
To construct a cone that touches two spheres at p0 and p1 with r0
and r1, one has to increase the cone radius at r0 and r1 to obtain
larger radii w0 and w1, such that the infinite cone properly touches
the spheres. From the paper "Ray Tracing Generalized Tube
Primitives: Method and Applications"
(https://www.researchgate.net/publication/334378683_Ray_Tracing_Generalized_Tube_Primitives_Method_and_Applications)
one can derive the following equations for these increased
radii:
sr = 1.0f / sqrt(1-sqr(dr)/sqr(p1-p0))
w0 = sr*r0
w1 = sr*r1
Further, we want the cone to start where it touches the sphere at p0
and to end where it touches sphere at p1. Therefore, we need to
construct clipping locations y0 and y1 for the start and end of the
cone. These start and end clipping location of the cone can get
calculated as:
Y0 = - r0 * (r1-r0) / length(p1-p0)
Y1 = length(p1-p0) - r1 * (r1-r0) / length(p1-p0)
Where the cone starts a distance Y0 and ends a distance Y1 away of
point p0 along the cone center. The distance between Y1-Y0 can get
calculated as:
dY = length(p1-p0) - (r1-r0)^2 / length(p1-p0)
In the code below, Y will always be scaled by length(p1-p0) to
obtain y and you will find the terms r0*(r1-r0) and
(p1-p0)^2-(r1-r0)^2.
|
31392 |
- |
| roundlinei_intersector.h |
|
5870 |
- |
| sphere_intersector.h |
check if there is a first hit |
6910 |
- |
| spherei_intersector.h |
|
6569 |
- |
| subdivpatch1.h |
! constructor for cached subdiv patch |
1093 |
- |
| subdivpatch1_intersector.h |
! Intersect a ray with the primitive. |
12017 |
- |
| subgrid.h |
Stores M quads from an indexed face set |
21937 |
- |
| subgrid_intersector.h |
|
21360 |
- |
| subgrid_intersector_moeller.h |
----------------------------- |
16062 |
- |
| subgrid_intersector_pluecker.h |
correct U,V interpolation across the entire grid |
14621 |
- |
| subgrid_mb_intersector.h |
|
9465 |
- |
| triangle.h |
Precalculated representation for M triangles. Stores for each
triangle a base vertex, two edges, and the geometry normal to
speed up intersection calculations |
6123 |
- |
| triangle_intersector.h |
! Intersects M triangles with 1 ray |
4142 |
- |
| triangle_intersector_moeller.h |
! This intersector implements a modified version of the Moeller
Trumbore intersector from the paper "Fast, Minimum Storage
Ray-Triangle Intersection". In contrast to the paper we
precalculate some factors and factor the calculations differently
to allow precalculating the cross product e1 x e2. The resulting
algorithm is similar to the fastest one of the paper "Optimizing
Ray-Triangle Intersection via Automated Search". |
22215 |
- |
| triangle_intersector_pluecker.h |
! Modified Pluecker ray/triangle intersector. The test first shifts
the ray origin into the origin of the coordinate system and then
uses Pluecker coordinates for the intersection. Due to the shift,
the Pluecker coordinate calculation simplifies and the tests get
numerically stable. The edge equations are watertight along the
edge for neighboring triangles. |
15332 |
- |
| triangle_intersector_woop.h |
! This intersector implements a modified version of the Woop's ray-triangle intersection test |
15820 |
- |
| triangle_triangle_intersector.h |
calculate triangle planes |
5556 |
- |
| trianglei.h |
Stores M triangles from an indexed face set |
16417 |
- |
| trianglei_intersector.h |
! Intersects M triangles with 1 ray |
15402 |
- |
| trianglev.h |
Stores the vertices of M triangles in struct of array layout |
5915 |
- |
| trianglev_intersector.h |
! Intersects M triangles with 1 ray |
9116 |
- |
| trianglev_mb.h |
Stores the vertices of M triangles in struct of array layout |
8691 |
- |
| trianglev_mb_intersector.h |
! Intersects M motion blur triangles with 1 ray |
10744 |
- |