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