/*] 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_ #include #include #include #include // Frustum // Plane (can construct from Triangle3) // 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 Mf { 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 intersectRay(const Ray& ray, typename Ray::Contact& hit) const { return false; } }; typedef Shape<2> Shape2; typedef Shape<3> Shape3; } // namespace Mf #endif // _MOOF_SHAPE_HH_