#include <vector>
#include "object.h"
+#include "geom.h"
#include "gmath/gmath.h"
+class Scene;
+
class SceneNode {
private:
char *name;
Mat4 xform;
Mat4 inv_xform;
+ mutable bool local_bvol_valid;
+ mutable AABox local_bvol;
+
public:
+ Scene *scene; // scene to which this node belongs
+ Mat4 dbg_xform;
+ bool visible; // if true, objects of this node are supposed to be visible
+
SceneNode();
explicit SceneNode(Object *obj);
~SceneNode();
void update_node(float dt = 0.0f);
void update(float dt = 0.0f);
+ void apply_xform();
+
bool intersect(const Ray &ray, HitPoint *hit) const;
+
+ // cached local bounding box (all objects in this node in model space)
+ const AABox &calc_local_bounds();
+ const AABox &get_local_bounds() const;
+
+ // world bounding box of the node
+ AABox get_node_bounds() const;
+ // world bounding box of the node and it's subtree
+ AABox get_bounds() const;
};
#endif // SNODE_H_