rayzor
annotate src/snode.h @ 15:be616b58df99
continued the renderer slightly
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Sun, 13 Apr 2014 09:54:36 +0300 |
parents | 964f8ea5f095 |
children | 79609d482762 |
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@13 | 9 |
nuclear@13 | 10 enum NodeType { |
nuclear@13 | 11 NODE_NULL, |
nuclear@13 | 12 NODE_OBJECT, |
nuclear@13 | 13 NODE_LIGHT, |
nuclear@13 | 14 NODE_CAMERA |
nuclear@13 | 15 }; |
nuclear@13 | 16 |
nuclear@13 | 17 class SceneNode { |
nuclear@13 | 18 protected: |
nuclear@13 | 19 char *name; |
nuclear@13 | 20 NodeType type; |
nuclear@13 | 21 |
nuclear@13 | 22 Vector3 pos; |
nuclear@13 | 23 Quat rot; |
nuclear@13 | 24 Vector3 scale; |
nuclear@13 | 25 Vector3 pivot; |
nuclear@13 | 26 |
nuclear@13 | 27 mutable Matrix4x4 xform, inv_xform; |
nuclear@13 | 28 mutable bool xform_valid, inv_xform_valid; |
nuclear@13 | 29 |
nuclear@13 | 30 vector<SceneNode*> children; |
nuclear@13 | 31 SceneNode *parent; |
nuclear@13 | 32 |
nuclear@13 | 33 SceneNode(const SceneNode &node) {} |
nuclear@13 | 34 SceneNode &operator =(const SceneNode &node) { return *this; } |
nuclear@13 | 35 |
nuclear@13 | 36 void invalidate() const; |
nuclear@13 | 37 virtual void calc_matrix() const; |
nuclear@13 | 38 virtual void calc_inv_matrix() const; |
nuclear@13 | 39 |
nuclear@14 | 40 virtual void pre_draw() const; |
nuclear@14 | 41 virtual void post_draw() const; |
nuclear@14 | 42 |
nuclear@13 | 43 public: |
nuclear@13 | 44 SceneNode(); |
nuclear@13 | 45 virtual ~SceneNode(); |
nuclear@13 | 46 |
nuclear@13 | 47 virtual void set_name(const char *name); |
nuclear@13 | 48 virtual const char *get_name() const; |
nuclear@13 | 49 |
nuclear@13 | 50 virtual NodeType get_type() const; |
nuclear@13 | 51 |
nuclear@13 | 52 virtual SceneNode *get_parent(); |
nuclear@13 | 53 virtual const SceneNode *get_parent() const; |
nuclear@13 | 54 |
nuclear@13 | 55 // children management |
nuclear@13 | 56 virtual void add_child(SceneNode *child); |
nuclear@13 | 57 virtual void remove_child(SceneNode *child); |
nuclear@13 | 58 |
nuclear@13 | 59 virtual int get_children_count() const; |
nuclear@13 | 60 virtual SceneNode *get_child(int idx); |
nuclear@13 | 61 virtual const SceneNode *get_child(int idx) const; |
nuclear@13 | 62 |
nuclear@13 | 63 virtual void set_position(const Vector3 &pos); |
nuclear@13 | 64 virtual Vector3 get_node_position() const; |
nuclear@13 | 65 |
nuclear@13 | 66 virtual void set_rotation(const Quat &quat); |
nuclear@13 | 67 virtual Quat get_node_rotation() const; |
nuclear@13 | 68 |
nuclear@13 | 69 virtual void set_scaling(const Vector3 &scale); |
nuclear@13 | 70 virtual Vector3 get_node_scaling() const; |
nuclear@13 | 71 |
nuclear@13 | 72 // these take hierarchy into account |
nuclear@13 | 73 virtual Vector3 get_position() const; |
nuclear@13 | 74 virtual Quat get_rotation() const; |
nuclear@13 | 75 virtual Vector3 get_scaling() const; |
nuclear@13 | 76 |
nuclear@13 | 77 virtual void set_pivot(const Vector3 &pivot); |
nuclear@13 | 78 virtual Vector3 get_pivot() const; |
nuclear@13 | 79 |
nuclear@13 | 80 virtual const Matrix4x4 &get_matrix() const; |
nuclear@13 | 81 virtual const Matrix4x4 &get_inv_matrix() const; |
nuclear@13 | 82 |
nuclear@14 | 83 virtual void draw(bool emph = false) const; |
nuclear@13 | 84 |
nuclear@13 | 85 virtual bool intersect(const Ray &ray, float *dist = 0) const; |
nuclear@13 | 86 }; |
nuclear@13 | 87 |
nuclear@13 | 88 #endif /* SCENE_NODE_H_ */ |