]> Dogcows Code - chaz/yoink/blobdiff - src/Moof/Plane.hh
initial working frustum culling implementation
[chaz/yoink] / src / Moof / Plane.hh
index 797edc05c39fe13283c4a52088502fcb6e2f132c..248a3128161afe0cadbdde10fa781d6b3e89c405 100644 (file)
 namespace Mf {
 
 
-class Plane
+class Aabb;
+class Sphere;
+
+
+struct Plane
 {
-       Vector4 components;
+       Vector3 normal;
+       Scalar  d;
+
+       typedef enum
+       {
+               NEGATIVE        = -1,
+               INTERSECT       =  0,
+               POSITIVE        =  1
+       } Halfspace;
+
+       Plane() {}
+       Plane(const Vector3& vector, Scalar scalar) :
+               normal(vector),
+               d(scalar) {}
+       Plane(Scalar a, Scalar b, Scalar c, Scalar scalar) :
+               normal(a, b, c),
+               d(scalar) {}
+
+
+       void normalize()
+       {
+               Scalar mag = normal.length();
+
+               normal /= mag;
+               d /= mag;
+       }
+
+       inline Scalar getDistanceToPoint(const Vector3& point) const
+       {
+               return cml::dot(point, normal) + d;
+       }
+
+       inline Halfspace intersectsPoint(const Vector3& point) const
+       {
+               Scalar distance = getDistanceToPoint(point);
+
+               if (isEqual(distance, 0.0)) return INTERSECT;
+               else if (distance < 0.0)    return NEGATIVE;
+               else                        return POSITIVE;
+       }
 
-public:
+       Halfspace intersectsAabb(const Aabb& aabb) const;
+       Halfspace intersectsSphere(const Sphere& sphere) const;
 };
 
 
This page took 0.020964 seconds and 4 git commands to generate.