/*] 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_FRUSTUM_HH_ #define _MOOF_FRUSTUM_HH_ /** * \file frustum.hh * All things related to frustums! */ #include #include namespace moof { template class aabb; template class sphere; /** * A six-sided volume for representing the space visible by a position * looking outward. */ class frustum { public: enum collision { outside = 0, inside = 1, intersecting = 2 }; frustum() {} frustum(const matrix4& modelview, const matrix4& projection) { init(modelview, projection); } frustum(const matrix4& modelview, scalar fovy, scalar aspect, scalar abutting, scalar distant) { init(modelview, fovy, aspect, abutting, distant); } void init(const matrix4& modelview, const matrix4& projection); void init(const matrix4& modelview, scalar fovy, scalar aspect, scalar abutting, scalar distant); collision contains(const aabb<3>& aabb) const; collision contains(const sphere<3>& sphere) const; private: plane planes_[6]; // left, right, bottom, top, near, far }; } // namespace moof #endif // _MOOF_FRUSTUM_HH_