X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2Fmoof%2Fshape.hh;fp=src%2Fmoof%2Fshape.hh;h=7f975032fb6b103dd9d044d3e122696ca2a09eed;hp=0000000000000000000000000000000000000000;hb=831f04d4bc19a390415ac0bbac4331c7a65509bc;hpb=299af4f2047e767e5d79501c26444473bda64c64 diff --git a/src/moof/shape.hh b/src/moof/shape.hh new file mode 100644 index 0000000..7f97503 --- /dev/null +++ b/src/moof/shape.hh @@ -0,0 +1,75 @@ + +/*] 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 ray::contact& hit) const + { + return false; + } +}; + + +typedef shape<2> shape2; +typedef shape<3> shape3; + + +} // namespace moof + +#endif // _MOOF_SHAPE_HH_ +