X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=laserbrain_demo;a=blobdiff_plain;f=src%2Fsnode.h;h=94ccb6a2e7125fc2d2b13ddbe77ee5dae4bbc009;hp=21cf16db0bc92691895fed17192472c310bc4ab9;hb=ad052fc67fe4e76d2f4a01b2381a738da1708cdb;hpb=b7c92831285013b2a0783bccaf3d900545ebb5ba diff --git a/src/snode.h b/src/snode.h index 21cf16d..94ccb6a 100644 --- a/src/snode.h +++ b/src/snode.h @@ -3,8 +3,11 @@ #include #include "object.h" +#include "geom.h" #include "gmath/gmath.h" +class Scene; + class SceneNode { private: char *name; @@ -21,7 +24,13 @@ private: 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; + SceneNode(); explicit SceneNode(Object *obj); ~SceneNode(); @@ -61,7 +70,18 @@ public: 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_