| Data Types | |
| type | mod_ray_tracing::t_ray | 
| Definition of a ray.  More... | |
| type | mod_ray_tracing::t_intersection | 
| Definition of an intersection.  More... | |
| type | mod_ray_tracing::t_intersection_list | 
| Sorted list of intersections.  More... | |
| Functions/Subroutines | |
| pure type(t_ray) function | mod_ray_tracing::rt_ray_partial_initialization (origin, direction) | 
| Initialize a ray from origin and direction only. | |
| pure subroutine | mod_ray_tracing::rt_get_transformed_ray (ray, transformation, transformed_ray) | 
| Get a transformed ray in the object frame. | |
| pure subroutine | mod_ray_tracing::rt_intersection_apply_transformation (intersection, transformation, ray, has_normal) | 
| Apply transformation to the intersection and compute the distance. | |
| pure type(t_intersection) function | mod_ray_tracing::rt_intersection_partial_initialization (point, distance) | 
| Initialize an interface from point and distance only. | |
| pure type(t_intersection) function | mod_ray_tracing::rt_intersection_partial_initialization_no_tag (point, distance, normal) | 
| Initialize an interface from point and distance only. | |
| pure subroutine | mod_ray_tracing::rt_intersection_list_clear (intersection_list) | 
| Clear the intersection list. | |
| pure subroutine | mod_ray_tracing::rt_intersection_list_push (intersection_list, intersection) | 
| Add an intersection to the list. | |
| logical pure function, public | mod_ray_tracing::rt_does_ray_hit_aligned_axis_bounding_box (ray, corner) | 
| Test the intersection of a ray and an aligned-axis bounding-box (AABB). | |
| pure subroutine, public | mod_ray_tracing::rt_transform_aligned_axis_bounding_box (corner, transformation) | 
| Transform an aligned-axis bounding-box (AABB). | |
| pure subroutine, public | mod_ray_tracing::rt_intersection_list_union (list1, list2, is_inside1, is_inside2, union) | 
| Generate the union of two lists of ray intersections. | |
| pure subroutine, public | mod_ray_tracing::rt_intersection_list_difference (list1, list2, is_inside1, is_inside2, difference) | 
| Generate the difference of two lists of ray intersections. | |
Ray-tracing tools
| logical pure function, public mod_ray_tracing::rt_does_ray_hit_aligned_axis_bounding_box | ( | type(t_ray), intent(in) | ray, | 
| double precision, dimension(3,2), intent(in) | corner ) | 
Test the intersection of a ray and an aligned-axis bounding-box (AABB).
Reference:
The corner(:,1) contains the minimal coordinates and corner(:,2) contains the maximal coordinates.
| [in] | ray | Ray. | 
| [in] | corner | Corners of the AABB. | 
| 
 | private | 
Get a transformed ray in the object frame.
| [in] | ray | Ray in the original frame (input) | 
| [in] | transformation | transformation. | 
| [out] | transformed_ray | ray in the transformed frame. | 
| 
 | private | 
Apply transformation to the intersection and compute the distance.
| [in,out] | intersection | Intersection. | 
| [in] | transformation | transformation. | 
| [in] | ray | ray in the original frame. | 
| [in] | has_normal | Apply transformation to the normal. | 
| 
 | private | 
Clear the intersection list.
Do not deallocate the list, just reset the number of intersections to zero.
| [in,out] | intersection_list | List of intersections. | 
| pure subroutine, public mod_ray_tracing::rt_intersection_list_difference | ( | type(t_intersection_list), intent(in) | list1, | 
| type(t_intersection_list), intent(in) | list2, | ||
| logical, intent(in) | is_inside1, | ||
| logical, intent(in) | is_inside2, | ||
| type(t_intersection_list), intent(out) | difference ) | 
Generate the difference of two lists of ray intersections.
| [in] | list1,list2 | Lists of ray intersections. | 
| [in] | is_inside1,is_inside2 | Is the origin of the ray inside or outside? | 
| [out] | difference | Difference of list1andlist2. | 
| 
 | private | 
Add an intersection to the list.
If the distance of the intersection to push is greater than the last item of the list, no insertion is required, this implies better performances.
Whenever it is possible, prefer to insert the intersections in a sorted order.
| [in,out] | intersection_list | List of intersections. | 
| [in] | intersection | Intersection. | 
| pure subroutine, public mod_ray_tracing::rt_intersection_list_union | ( | type(t_intersection_list), intent(in) | list1, | 
| type(t_intersection_list), intent(in) | list2, | ||
| logical, intent(in) | is_inside1, | ||
| logical, intent(in) | is_inside2, | ||
| type(t_intersection_list), intent(out) | union ) | 
Generate the union of two lists of ray intersections.
| [in] | list1,list2 | Lists of ray intersection. | 
| [in] | is_inside1,is_inside2 | Is the origin of the ray inside or outside? | 
| [out] | union | Union of list1andlist2. | 
| 
 | private | 
Initialize an interface from point and distance only.
The normal vector is set to null vector.
| [in] | point | Intersection point | 
| [in] | distance | Intersection distance | 
| 
 | private | 
Initialize an interface from point and distance only.
The normal vector is set to null vector.
| [in] | point | Intersection point | 
| [in] | distance | Intersection distance | 
| [in] | normal | Normal vector at the intersection point | 
| pure type(t_ray) function mod_ray_tracing::rt_ray_partial_initialization | ( | double precision, dimension(3), intent(in) | origin, | 
| double precision, dimension(3), intent(in) | direction ) | 
Initialize a ray from origin and direction only.
| [in] | origin | Origin of the ray | 
| [in] | direction | Direction of the ray | 
| pure subroutine, public mod_ray_tracing::rt_transform_aligned_axis_bounding_box | ( | double precision, dimension(3,2), intent(inout) | corner, | 
| type(t_cg_transformation), intent(in) | transformation ) | 
Transform an aligned-axis bounding-box (AABB).
| [in,out] | corner | Corners of the AABB. | 
| [in] | transformation | Tranformation applied to the AABB. |