diff options
Diffstat (limited to 'indra/llmath/raytrace.h')
-rw-r--r-- | indra/llmath/raytrace.h | 136 |
1 files changed, 68 insertions, 68 deletions
diff --git a/indra/llmath/raytrace.h b/indra/llmath/raytrace.h index 2352790b1f..b55f29aef6 100644 --- a/indra/llmath/raytrace.h +++ b/indra/llmath/raytrace.h @@ -1,25 +1,25 @@ -/** +/** * @file raytrace.h * @brief Ray intersection tests for primitives. * * $LicenseInfo:firstyear=2001&license=viewerlgpl$ * Second Life Viewer Source Code * Copyright (C) 2010, Linden Research, Inc. - * + * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License only. - * + * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. - * + * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * + * * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ @@ -39,7 +39,7 @@ class LLQuaternion; // object along the three axes. // // All functions return the expected true or false, unless otherwise noted. -// When false is returned, any resulting values that might have been stored +// When false is returned, any resulting values that might have been stored // are undefined. // // Rays are defined by a "ray_point" and a "ray_direction" (unit). @@ -55,7 +55,7 @@ class LLQuaternion; // Intersection normals always point outside the object, normal to the object's // surface at the point of intersection. // -// Object rotations passed as quaternions are expected to rotate from the +// Object rotations passed as quaternions are expected to rotate from the // object's local frame to the absolute frame. So, if "foo" is a vector in // the object's local frame, then "foo * object_rotation" is in the absolute // frame. @@ -63,25 +63,25 @@ class LLQuaternion; // returns true if line is not parallel to plane. bool line_plane(const LLVector3 &line_point, const LLVector3 &line_direction, - const LLVector3 &plane_point, const LLVector3 plane_normal, - LLVector3 &intersection); + const LLVector3 &plane_point, const LLVector3 plane_normal, + LLVector3 &intersection); // returns true if line is not parallel to plane. bool ray_plane(const LLVector3 &ray_point, const LLVector3 &ray_direction, - const LLVector3 &plane_point, const LLVector3 plane_normal, - LLVector3 &intersection); + const LLVector3 &plane_point, const LLVector3 plane_normal, + LLVector3 &intersection); bool ray_circle(const LLVector3 &ray_point, const LLVector3 &ray_direction, - const LLVector3 &circle_center, const LLVector3 plane_normal, F32 circle_radius, - LLVector3 &intersection); + const LLVector3 &circle_center, const LLVector3 plane_normal, F32 circle_radius, + LLVector3 &intersection); // point_0 through point_2 define the plane_normal via the right-hand rule: // circle from point_0 to point_2 with fingers ==> thumb points in direction of normal bool ray_triangle(const LLVector3 &ray_point, const LLVector3 &ray_direction, - const LLVector3 &point_0, const LLVector3 &point_1, const LLVector3 &point_2, - LLVector3 &intersection, LLVector3 &intersection_normal); + const LLVector3 &point_0, const LLVector3 &point_1, const LLVector3 &point_2, + LLVector3 &intersection, LLVector3 &intersection_normal); // point_0 is the lower-left corner, point_1 is the lower-right, point_2 is the upper-right @@ -89,96 +89,96 @@ bool ray_triangle(const LLVector3 &ray_point, const LLVector3 &ray_direction, // ==> thumb points in direction of normal // assumes a parallelogram, so point_3 is determined by the other points bool ray_quadrangle(const LLVector3 &ray_point, const LLVector3 &ray_direction, - const LLVector3 &point_0, const LLVector3 &point_1, const LLVector3 &point_2, - LLVector3 &intersection, LLVector3 &intersection_normal); + const LLVector3 &point_0, const LLVector3 &point_1, const LLVector3 &point_2, + LLVector3 &intersection, LLVector3 &intersection_normal); bool ray_sphere(const LLVector3 &ray_point, const LLVector3 &ray_direction, - const LLVector3 &sphere_center, F32 sphere_radius, - LLVector3 &intersection, LLVector3 &intersection_normal); + const LLVector3 &sphere_center, F32 sphere_radius, + LLVector3 &intersection, LLVector3 &intersection_normal); -// finite right cylinder is defined by end centers: "cyl_top", "cyl_bottom", +// finite right cylinder is defined by end centers: "cyl_top", "cyl_bottom", // and by the cylinder radius "cyl_radius" bool ray_cylinder(const LLVector3 &ray_point, const LLVector3 &ray_direction, - const LLVector3 &cyl_center, const LLVector3 &cyl_scale, const LLQuaternion &cyl_rotation, - LLVector3 &intersection, LLVector3 &intersection_normal); + const LLVector3 &cyl_center, const LLVector3 &cyl_scale, const LLQuaternion &cyl_rotation, + LLVector3 &intersection, LLVector3 &intersection_normal); // this function doesn't just return a bool because the return is currently -// used to decide how to break up boxes that have been hit by shots... +// used to decide how to break up boxes that have been hit by shots... // a hack that will probably be changed later // // returns a number representing the side of the box that was hit by the ray, // or NO_SIDE if intersection test failed. U32 ray_box(const LLVector3 &ray_point, const LLVector3 &ray_direction, - const LLVector3 &box_center, const LLVector3 &box_scale, const LLQuaternion &box_rotation, - LLVector3 &intersection, LLVector3 &intersection_normal); + const LLVector3 &box_center, const LLVector3 &box_scale, const LLQuaternion &box_rotation, + LLVector3 &intersection, LLVector3 &intersection_normal); /* TODO bool ray_ellipsoid(const LLVector3 &ray_point, const LLVector3 &ray_direction, - const LLVector3 &e_center, const LLVector3 &e_scale, const LLQuaternion &e_rotation, - LLVector3 &intersection, LLVector3 &intersection_normal); + const LLVector3 &e_center, const LLVector3 &e_scale, const LLQuaternion &e_rotation, + LLVector3 &intersection, LLVector3 &intersection_normal); bool ray_cone(const LLVector3 &ray_point, const LLVector3 &ray_direction, - const LLVector3 &cone_tip, const LLVector3 &cone_bottom, - const LLVector3 &cone_scale, const LLQuaternion &cone_rotation, - LLVector3 &intersection, LLVector3 &intersection_normal); + const LLVector3 &cone_tip, const LLVector3 &cone_bottom, + const LLVector3 &cone_scale, const LLQuaternion &cone_rotation, + LLVector3 &intersection, LLVector3 &intersection_normal); */ bool ray_prism(const LLVector3 &ray_point, const LLVector3 &ray_direction, - const LLVector3 &prism_center, const LLVector3 &prism_scale, const LLQuaternion &prism_rotation, - LLVector3 &intersection, LLVector3 &intersection_normal); + const LLVector3 &prism_center, const LLVector3 &prism_scale, const LLQuaternion &prism_rotation, + LLVector3 &intersection, LLVector3 &intersection_normal); bool ray_tetrahedron(const LLVector3 &ray_point, const LLVector3 &ray_direction, - const LLVector3 &t_center, const LLVector3 &t_scale, const LLQuaternion &t_rotation, - LLVector3 &intersection, LLVector3 &intersection_normal); + const LLVector3 &t_center, const LLVector3 &t_scale, const LLQuaternion &t_rotation, + LLVector3 &intersection, LLVector3 &intersection_normal); bool ray_pyramid(const LLVector3 &ray_point, const LLVector3 &ray_direction, - const LLVector3 &p_center, const LLVector3 &p_scale, const LLQuaternion &p_rotation, - LLVector3 &intersection, LLVector3 &intersection_normal); + const LLVector3 &p_center, const LLVector3 &p_scale, const LLQuaternion &p_rotation, + LLVector3 &intersection, LLVector3 &intersection_normal); /* TODO bool ray_hemiellipsoid(const LLVector3 &ray_point, const LLVector3 &ray_direction, - const LLVector3 &e_center, const LLVector3 &e_scale, const LLQuaternion &e_rotation, - const LLVector3 &e_cut_normal, - LLVector3 &intersection, LLVector3 &intersection_normal); + const LLVector3 &e_center, const LLVector3 &e_scale, const LLQuaternion &e_rotation, + const LLVector3 &e_cut_normal, + LLVector3 &intersection, LLVector3 &intersection_normal); bool ray_hemisphere(const LLVector3 &ray_point, const LLVector3 &ray_direction, - const LLVector3 &sphere_center, F32 sphere_radius, const LLVector3 &sphere_cut_normal, - LLVector3 &intersection, LLVector3 &intersection_normal); + const LLVector3 &sphere_center, F32 sphere_radius, const LLVector3 &sphere_cut_normal, + LLVector3 &intersection, LLVector3 &intersection_normal); bool ray_hemicylinder(const LLVector3 &ray_point, const LLVector3 &ray_direction, - const LLVector3 &cyl_top, const LLVector3 &cyl_bottom, F32 cyl_radius, - const LLVector3 &cyl_cut_normal, - LLVector3 &intersection, LLVector3 &intersection_normal); + const LLVector3 &cyl_top, const LLVector3 &cyl_bottom, F32 cyl_radius, + const LLVector3 &cyl_cut_normal, + LLVector3 &intersection, LLVector3 &intersection_normal); bool ray_hemicone(const LLVector3 &ray_point, const LLVector3 &ray_direction, - const LLVector3 &cone_tip, const LLVector3 &cone_bottom, - const LLVector3 &cone_scale, const LLVector3 &cyl_cut_normal, - LLVector3 &intersection, LLVector3 &intersection_normal); + const LLVector3 &cone_tip, const LLVector3 &cone_bottom, + const LLVector3 &cone_scale, const LLVector3 &cyl_cut_normal, + LLVector3 &intersection, LLVector3 &intersection_normal); */ bool linesegment_circle(const LLVector3 &point_a, const LLVector3 &point_b, - const LLVector3 &circle_center, const LLVector3 plane_normal, F32 circle_radius, - LLVector3 &intersection); + const LLVector3 &circle_center, const LLVector3 plane_normal, F32 circle_radius, + LLVector3 &intersection); // point_0 through point_2 define the plane_normal via the right-hand rule: // circle from point_0 to point_2 with fingers ==> thumb points in direction of normal bool linesegment_triangle(const LLVector3 &point_a, const LLVector3 &point_b, - const LLVector3 &point_0, const LLVector3 &point_1, const LLVector3 &point_2, - LLVector3 &intersection, LLVector3 &intersection_normal); + const LLVector3 &point_0, const LLVector3 &point_1, const LLVector3 &point_2, + LLVector3 &intersection, LLVector3 &intersection_normal); // point_0 is the lower-left corner, point_1 is the lower-right, point_2 is the upper-right @@ -186,44 +186,44 @@ bool linesegment_triangle(const LLVector3 &point_a, const LLVector3 &point_b, // ==> thumb points in direction of normal // assumes a parallelogram, so point_3 is determined by the other points bool linesegment_quadrangle(const LLVector3 &point_a, const LLVector3 &point_b, - const LLVector3 &point_0, const LLVector3 &point_1, const LLVector3 &point_2, - LLVector3 &intersection, LLVector3 &intersection_normal); + const LLVector3 &point_0, const LLVector3 &point_1, const LLVector3 &point_2, + LLVector3 &intersection, LLVector3 &intersection_normal); bool linesegment_sphere(const LLVector3 &point_a, const LLVector3 &point_b, - const LLVector3 &sphere_center, F32 sphere_radius, - LLVector3 &intersection, LLVector3 &intersection_normal); + const LLVector3 &sphere_center, F32 sphere_radius, + LLVector3 &intersection, LLVector3 &intersection_normal); -// finite right cylinder is defined by end centers: "cyl_top", "cyl_bottom", +// finite right cylinder is defined by end centers: "cyl_top", "cyl_bottom", // and by the cylinder radius "cyl_radius" bool linesegment_cylinder(const LLVector3 &point_a, const LLVector3 &point_b, - const LLVector3 &cyl_center, const LLVector3 &cyl_scale, const LLQuaternion &cyl_rotation, - LLVector3 &intersection, LLVector3 &intersection_normal); + const LLVector3 &cyl_center, const LLVector3 &cyl_scale, const LLQuaternion &cyl_rotation, + LLVector3 &intersection, LLVector3 &intersection_normal); // this function doesn't just return a bool because the return is currently -// used to decide how to break up boxes that have been hit by shots... +// used to decide how to break up boxes that have been hit by shots... // a hack that will probably be changed later // // returns a number representing the side of the box that was hit by the ray, // or NO_SIDE if intersection test failed. -U32 linesegment_box(const LLVector3 &point_a, const LLVector3 &point_b, - const LLVector3 &box_center, const LLVector3 &box_scale, const LLQuaternion &box_rotation, - LLVector3 &intersection, LLVector3 &intersection_normal); +U32 linesegment_box(const LLVector3 &point_a, const LLVector3 &point_b, + const LLVector3 &box_center, const LLVector3 &box_scale, const LLQuaternion &box_rotation, + LLVector3 &intersection, LLVector3 &intersection_normal); bool linesegment_prism(const LLVector3 &point_a, const LLVector3 &point_b, - const LLVector3 &prism_center, const LLVector3 &prism_scale, const LLQuaternion &prism_rotation, - LLVector3 &intersection, LLVector3 &intersection_normal); + const LLVector3 &prism_center, const LLVector3 &prism_scale, const LLQuaternion &prism_rotation, + LLVector3 &intersection, LLVector3 &intersection_normal); bool linesegment_tetrahedron(const LLVector3 &point_a, const LLVector3 &point_b, - const LLVector3 &t_center, const LLVector3 &t_scale, const LLQuaternion &t_rotation, - LLVector3 &intersection, LLVector3 &intersection_normal); + const LLVector3 &t_center, const LLVector3 &t_scale, const LLQuaternion &t_rotation, + LLVector3 &intersection, LLVector3 &intersection_normal); bool linesegment_pyramid(const LLVector3 &point_a, const LLVector3 &point_b, - const LLVector3 &p_center, const LLVector3 &p_scale, const LLQuaternion &p_rotation, - LLVector3 &intersection, LLVector3 &intersection_normal); + const LLVector3 &p_center, const LLVector3 &p_scale, const LLQuaternion &p_rotation, + LLVector3 &intersection, LLVector3 &intersection_normal); #endif |