rayzor
annotate src/snode.h @ 22:5380ff64e83f
minor changes from dos, and line endings cleanup
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Fri, 02 May 2014 14:32:58 +0300 |
parents | a9a948809c6f |
children |
rev | line source |
---|---|
nuclear@13 | 1 #ifndef SCENE_NODE_H_ |
nuclear@13 | 2 #define SCENE_NODE_H_ |
nuclear@13 | 3 |
nuclear@13 | 4 #include "vector.h" |
nuclear@13 | 5 #include "vmath.h" |
nuclear@13 | 6 #include "quat.h" |
nuclear@13 | 7 #include "vmathmat.h" |
nuclear@13 | 8 #include "vmathray.h" |
nuclear@17 | 9 #include "raytrace.h" |
nuclear@13 | 10 |
nuclear@13 | 11 enum NodeType { |
nuclear@13 | 12 NODE_NULL, |
nuclear@13 | 13 NODE_OBJECT, |
nuclear@13 | 14 NODE_LIGHT, |
nuclear@13 | 15 NODE_CAMERA |
nuclear@13 | 16 }; |
nuclear@13 | 17 |
nuclear@13 | 18 class SceneNode { |
nuclear@13 | 19 protected: |
nuclear@13 | 20 char *name; |
nuclear@13 | 21 NodeType type; |
nuclear@13 | 22 |
nuclear@13 | 23 Vector3 pos; |
nuclear@13 | 24 Quat rot; |
nuclear@13 | 25 Vector3 scale; |
nuclear@13 | 26 Vector3 pivot; |
nuclear@13 | 27 |
nuclear@13 | 28 mutable Matrix4x4 xform, inv_xform; |
nuclear@13 | 29 mutable bool xform_valid, inv_xform_valid; |
nuclear@13 | 30 |
nuclear@13 | 31 vector<SceneNode*> children; |
nuclear@13 | 32 SceneNode *parent; |
nuclear@13 | 33 |
nuclear@13 | 34 SceneNode(const SceneNode &node) {} |
nuclear@13 | 35 SceneNode &operator =(const SceneNode &node) { return *this; } |
nuclear@13 | 36 |
nuclear@13 | 37 void invalidate() const; |
nuclear@13 | 38 virtual void calc_matrix() const; |
nuclear@13 | 39 virtual void calc_inv_matrix() const; |
nuclear@13 | 40 |
nuclear@14 | 41 virtual void pre_draw() const; |
nuclear@14 | 42 virtual void post_draw() const; |
nuclear@14 | 43 |
nuclear@13 | 44 public: |
nuclear@13 | 45 SceneNode(); |
nuclear@13 | 46 virtual ~SceneNode(); |
nuclear@13 | 47 |
nuclear@13 | 48 virtual void set_name(const char *name); |
nuclear@13 | 49 virtual const char *get_name() const; |
nuclear@13 | 50 |
nuclear@13 | 51 virtual NodeType get_type() const; |
nuclear@13 | 52 |
nuclear@13 | 53 virtual SceneNode *get_parent(); |
nuclear@13 | 54 virtual const SceneNode *get_parent() const; |
nuclear@13 | 55 |
nuclear@13 | 56 // children management |
nuclear@13 | 57 virtual void add_child(SceneNode *child); |
nuclear@13 | 58 virtual void remove_child(SceneNode *child); |
nuclear@13 | 59 |
nuclear@13 | 60 virtual int get_children_count() const; |
nuclear@13 | 61 virtual SceneNode *get_child(int idx); |
nuclear@13 | 62 virtual const SceneNode *get_child(int idx) const; |
nuclear@13 | 63 |
nuclear@13 | 64 virtual void set_position(const Vector3 &pos); |
nuclear@13 | 65 virtual Vector3 get_node_position() const; |
nuclear@13 | 66 |
nuclear@13 | 67 virtual void set_rotation(const Quat &quat); |
nuclear@13 | 68 virtual Quat get_node_rotation() const; |
nuclear@13 | 69 |
nuclear@13 | 70 virtual void set_scaling(const Vector3 &scale); |
nuclear@13 | 71 virtual Vector3 get_node_scaling() const; |
nuclear@13 | 72 |
nuclear@13 | 73 // these take hierarchy into account |
nuclear@13 | 74 virtual Vector3 get_position() const; |
nuclear@13 | 75 virtual Quat get_rotation() const; |
nuclear@13 | 76 virtual Vector3 get_scaling() const; |
nuclear@13 | 77 |
nuclear@13 | 78 virtual void set_pivot(const Vector3 &pivot); |
nuclear@13 | 79 virtual Vector3 get_pivot() const; |
nuclear@13 | 80 |
nuclear@13 | 81 virtual const Matrix4x4 &get_matrix() const; |
nuclear@13 | 82 virtual const Matrix4x4 &get_inv_matrix() const; |
nuclear@13 | 83 |
nuclear@14 | 84 virtual void draw(bool emph = false) const; |
nuclear@13 | 85 |
nuclear@17 | 86 virtual bool intersect(const Ray &ray, RayHit *hit = 0) const; |
nuclear@13 | 87 }; |
nuclear@13 | 88 |
nuclear@13 | 89 #endif /* SCENE_NODE_H_ */ |