/*] Copyright (c) 2009-2010, Charles McGarvey [************************** **] All rights reserved. * * vi:ts=4 sw=4 tw=75 * * Distributable under the terms and conditions of the 2-clause BSD license; * see the file COPYING for a complete text of the license. * **************************************************************************/ #ifndef _MOOF_SHAPE_HH_ #define _MOOF_SHAPE_HH_ /** * \file shape.hh * Declares an interface for shapes. */ #include #include #include #include // frustum // plane (can construct from triangle2) // ray // shape<> // +- line<> // - line2 line<2> // - line3 line<3> // +- sphere<> // | sphere2, circle sphere<2> // | sphere3 sphere<3> // +- aabb<> // | aabb2, rectangle aabb<2> // | aabb3 aabb<3> // +- polygon<> // | triangle2 polygon<2,3> // | triangle3 polygon<3,3> namespace moof { template class shape { public: virtual ~shape() {} /** * Checks if this shape is intersected by a given ray. If so, returns * the distance from the start of the ray to the shape and information * about the contact via the 2nd parameter. A negative value is * returned if there is no contact. */ virtual bool intersect_ray(const ray& ray, typename moof::ray::contact& hit) const { return false; } }; typedef shape<2> shape2; typedef shape<3> shape3; } // namespace moof #endif // _MOOF_SHAPE_HH_