00001 
00032 #ifndef LL_RAYTRACE_H
00033 #define LL_RAYTRACE_H
00034 
00035 class LLVector3;
00036 class LLQuaternion;
00037 
00038 
00039 
00040 
00041 
00042 
00043 
00044 
00045 
00046 
00047 
00048 
00049 
00050 
00051 
00052 
00053 
00054 
00055 
00056 
00057 
00058 
00059 
00060 
00061 
00062 
00063 
00064 
00065 
00066 
00067 
00068 
00069 
00070 BOOL line_plane(const LLVector3 &line_point, const LLVector3 &line_direction, 
00071                                 const LLVector3 &plane_point, const LLVector3 plane_normal, 
00072                                 LLVector3 &intersection);
00073 
00074 
00075 
00076 BOOL ray_plane(const LLVector3 &ray_point, const LLVector3 &ray_direction, 
00077                            const LLVector3 &plane_point, const LLVector3 plane_normal, 
00078                            LLVector3 &intersection);
00079 
00080 
00081 BOOL ray_circle(const LLVector3 &ray_point, const LLVector3 &ray_direction, 
00082                                 const LLVector3 &circle_center, const LLVector3 plane_normal, F32 circle_radius,
00083                                 LLVector3 &intersection);
00084 
00085 
00086 
00087 BOOL ray_triangle(const LLVector3 &ray_point, const LLVector3 &ray_direction, 
00088                                   const LLVector3 &point_0, const LLVector3 &point_1, const LLVector3 &point_2, 
00089                                   LLVector3 &intersection, LLVector3 &intersection_normal);
00090 
00091 
00092 
00093 
00094 
00095 
00096 BOOL ray_quadrangle(const LLVector3 &ray_point, const LLVector3 &ray_direction, 
00097                                         const LLVector3 &point_0, const LLVector3 &point_1, const LLVector3 &point_2, 
00098                                         LLVector3 &intersection, LLVector3 &intersection_normal);
00099 
00100 
00101 BOOL ray_sphere(const LLVector3 &ray_point, const LLVector3 &ray_direction,
00102                                 const LLVector3 &sphere_center, F32 sphere_radius,
00103                                 LLVector3 &intersection, LLVector3 &intersection_normal);
00104 
00105 
00106 
00107 
00108 BOOL ray_cylinder(const LLVector3 &ray_point, const LLVector3 &ray_direction,
00109                           const LLVector3 &cyl_center, const LLVector3 &cyl_scale, const LLQuaternion &cyl_rotation,
00110                                   LLVector3 &intersection, LLVector3 &intersection_normal);
00111 
00112 
00113 
00114 
00115 
00116 
00117 
00118 
00119 U32 ray_box(const LLVector3 &ray_point, const LLVector3 &ray_direction,
00120                     const LLVector3 &box_center, const LLVector3 &box_scale, const LLQuaternion &box_rotation,
00121                         LLVector3 &intersection, LLVector3 &intersection_normal);
00122 
00123 
00124 
00125 
00126 
00127 
00128 
00129 
00130 
00131 
00132 
00133 
00134 
00135 
00136 
00137 BOOL ray_prism(const LLVector3 &ray_point, const LLVector3 &ray_direction,
00138                            const LLVector3 &prism_center, const LLVector3 &prism_scale, const LLQuaternion &prism_rotation,
00139                            LLVector3 &intersection, LLVector3 &intersection_normal);
00140 
00141 
00142 BOOL ray_tetrahedron(const LLVector3 &ray_point, const LLVector3 &ray_direction,
00143                                          const LLVector3 &t_center, const LLVector3 &t_scale, const LLQuaternion &t_rotation,
00144                                          LLVector3 &intersection, LLVector3 &intersection_normal);
00145 
00146 
00147 BOOL ray_pyramid(const LLVector3 &ray_point, const LLVector3 &ray_direction,
00148                                  const LLVector3 &p_center, const LLVector3 &p_scale, const LLQuaternion &p_rotation,
00149                                  LLVector3 &intersection, LLVector3 &intersection_normal);
00150 
00151 
00152 
00153 
00154 
00155 
00156 
00157 
00158 
00159 
00160 
00161 
00162 
00163 
00164 
00165 
00166 
00167 
00168 
00169 
00170 
00171 
00172 
00173 
00174 
00175 
00176 
00177 
00178 BOOL linesegment_circle(const LLVector3 &point_a, const LLVector3 &point_b, 
00179                                                 const LLVector3 &circle_center, const LLVector3 plane_normal, F32 circle_radius,
00180                                                 LLVector3 &intersection);
00181 
00182 
00183 
00184 BOOL linesegment_triangle(const LLVector3 &point_a, const LLVector3 &point_b, 
00185                                                   const LLVector3 &point_0, const LLVector3 &point_1, const LLVector3 &point_2, 
00186                                                   LLVector3 &intersection, LLVector3 &intersection_normal);
00187 
00188 
00189 
00190 
00191 
00192 
00193 BOOL linesegment_quadrangle(const LLVector3 &point_a, const LLVector3 &point_b, 
00194                                                         const LLVector3 &point_0, const LLVector3 &point_1, const LLVector3 &point_2, 
00195                                                         LLVector3 &intersection, LLVector3 &intersection_normal);
00196 
00197 
00198 BOOL linesegment_sphere(const LLVector3 &point_a, const LLVector3 &point_b,
00199                                 const LLVector3 &sphere_center, F32 sphere_radius,
00200                                 LLVector3 &intersection, LLVector3 &intersection_normal);
00201 
00202 
00203 
00204 
00205 BOOL linesegment_cylinder(const LLVector3 &point_a, const LLVector3 &point_b,
00206                                                   const LLVector3 &cyl_center, const LLVector3 &cyl_scale, const LLQuaternion &cyl_rotation,
00207                                                   LLVector3 &intersection, LLVector3 &intersection_normal);
00208 
00209 
00210 
00211 
00212 
00213 
00214 
00215 
00216 U32 linesegment_box(const LLVector3 &point_a, const LLVector3 &point_b, 
00217                                         const LLVector3 &box_center, const LLVector3 &box_scale, const LLQuaternion &box_rotation,
00218                                         LLVector3 &intersection, LLVector3 &intersection_normal);
00219 
00220 
00221 BOOL linesegment_prism(const LLVector3 &point_a, const LLVector3 &point_b,
00222                                            const LLVector3 &prism_center, const LLVector3 &prism_scale, const LLQuaternion &prism_rotation,
00223                                            LLVector3 &intersection, LLVector3 &intersection_normal);
00224 
00225 
00226 BOOL linesegment_tetrahedron(const LLVector3 &point_a, const LLVector3 &point_b,
00227                                                          const LLVector3 &t_center, const LLVector3 &t_scale, const LLQuaternion &t_rotation,
00228                                                          LLVector3 &intersection, LLVector3 &intersection_normal);
00229 
00230 
00231 BOOL linesegment_pyramid(const LLVector3 &point_a, const LLVector3 &point_b,
00232                                                  const LLVector3 &p_center, const LLVector3 &p_scale, const LLQuaternion &p_rotation,
00233                                                  LLVector3 &intersection, LLVector3 &intersection_normal);
00234 
00235 
00236 #endif
00237