Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/model/plane.h')
-rw-r--r--src/model/plane.h58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/model/plane.h b/src/model/plane.h
new file mode 100644
index 0000000..5fdc99f
--- /dev/null
+++ b/src/model/plane.h
@@ -0,0 +1,58 @@
+/*
+ model/plane.h
+ This file is part of the Osirion project and is distributed under
+ the terms of the GNU General Public License version 2
+*/
+
+#ifndef __INCLUDED_MODEL_PLANE_H__
+#define __INCLUDED_MODEL_PLANE_H__
+
+#include <string>
+
+#include "math/vector3f.h"
+
+namespace model
+{
+
+/** @brief A class representing a plane in 3d space
+ * all points p(x, y, z) on the plane satisfy the general equation
+ * x*a() + y*b() + z*c() + d() = 0
+ */
+class Plane
+{
+public:
+ /// a plane defined by 3 points in space
+ Plane(math::Vector3f const & point0, math::Vector3f const &point1, math::Vector3f const &point2);
+ /// copy constructor
+ Plane(Plane const & other);
+
+ /// normal of the plane, not normalized to lenght 1
+ inline math::Vector3f const & normal() const { return plane_normal; }
+ /// the points defining the plane.
+ /// @param i 0 <= i < 3
+ inline math::Vector3f const & point(size_t i) const { return plane_point[i]; }
+ /// plane texture
+ inline std::string & texture() { return plane_texture; }
+ /// first parameter of the general equation
+ inline float a() const { return plane_normal[0]; }
+ /// second parameter of the general equation
+ inline float b() const { return plane_normal[1]; }
+ /// third param of the general equation
+ inline float c() const { return plane_normal[2]; }
+ /// fourth parameter of the general equation
+ inline float d() const { return pd; }
+ /// indidcates if this plane was generated from a detail brush
+ inline bool & detail() { return plane_detail; }
+
+
+private:
+ math::Vector3f plane_point[3];
+ math::Vector3f plane_normal;
+ std::string plane_texture;
+ bool plane_detail;
+ float pd;
+};
+
+}
+
+#endif // __INCLUDED_MODEL_PLANE_H__