nuclear@3: #ifndef SNODE_H_ nuclear@3: #define SNODE_H_ nuclear@3: nuclear@3: #include nuclear@3: #include "object.h" nuclear@3: #include "vmath/vmath.h" nuclear@3: #include "geom.h" nuclear@3: nuclear@3: class SceneNode { nuclear@3: private: nuclear@3: Vector3 pos; nuclear@3: Quaternion rot; nuclear@3: Vector3 scale; nuclear@3: nuclear@3: std::vector obj; nuclear@3: nuclear@3: SceneNode *parent; nuclear@3: std::vector children; nuclear@3: nuclear@3: Matrix4x4 xform; nuclear@3: Matrix4x4 inv_xform; nuclear@3: nuclear@3: public: nuclear@3: SceneNode(); nuclear@3: explicit SceneNode(Object *obj); nuclear@3: nuclear@3: void add_child(SceneNode *node); nuclear@3: bool remove_child(SceneNode *node); nuclear@3: nuclear@3: int get_num_children() const; nuclear@3: SceneNode *get_child(int idx) const; nuclear@3: nuclear@3: SceneNode *get_parent() const; nuclear@3: nuclear@3: void add_object(Object *obj); nuclear@3: int get_num_objects() const; nuclear@3: Object *get_object(int idx) const; nuclear@3: nuclear@3: void set_position(const Vector3 &pos); nuclear@3: void set_rotation(const Quaternion &rot); nuclear@3: void set_scaling(const Vector3 &scale); nuclear@3: nuclear@3: const Vector3 &get_node_position() const; nuclear@3: const Quaternion &get_node_rotation() const; nuclear@3: const Vector3 &get_node_scaling() const; nuclear@3: nuclear@3: Vector3 get_position() const; nuclear@3: Quaternion get_rotation() const; nuclear@3: Vector3 get_scaling() const; nuclear@3: nuclear@3: const Matrix4x4 &get_matrix() const; nuclear@3: const Matrix4x4 &get_inv_matrix() const; nuclear@3: nuclear@3: void update_node(long msec = 0); nuclear@3: void update(long msec = 0); nuclear@3: nuclear@3: bool intersect(const Ray &ray, HitPoint *hit) const; nuclear@3: }; nuclear@3: nuclear@3: #endif // SNODE_H_