#ifndef __BEAM_H #define __BEAM_H #include using namespace std; class KdNode; class Intersectable; #include "AxisAlignedBox3.h" class Beam { public: enum {STORE_KD_NODES=1, STORE_OBJECTS=2, VALID=4}; int mFlags; // list of nodes intersected by the frustum vector mKdNodes; // lits of objects intersected by the frustum vector mObjects; // spatial box AxisAlignedBox3 mBox; // directional box (it is actually a 2D box - only x and y ranges are valid) // directional parametrization according to VssRay::GetDirParametrization AxisAlignedBox3 mDirBox; vector mPlanes; bool IsValid() { return mFlags & VALID; } bool SetValid() { return mFlags |= VALID; } Beam():mFlags(STORE_KD_NODES+STORE_OBJECTS),mKdNodes(0), mObjects(0) { } void Construct(const AxisAlignedBox3 &box, const AxisAlignedBox3 &dBox); int ComputeIntersection(const AxisAlignedBox3 &box); }; #endif