]> Dogcows Code - chaz/yoink/blobdiff - src/moof/frustum.hh
the massive refactoring effort
[chaz/yoink] / src / moof / frustum.hh
diff --git a/src/moof/frustum.hh b/src/moof/frustum.hh
new file mode 100644 (file)
index 0000000..1e44701
--- /dev/null
@@ -0,0 +1,74 @@
+
+/*]  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 <moof/math.hh>
+#include <moof/plane.hh>
+
+
+namespace moof {
+
+
+template <int D> class aabb;
+template <int D> 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_
+
This page took 0.022935 seconds and 4 git commands to generate.