rayzor
annotate src/snode.h @ 13:964f8ea5f095
missed quite a lot of things in my last commit apparently
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Sat, 12 Apr 2014 23:37:55 +0300 |
parents | |
children | a9a948809c6f |
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@13 | 40 public: |
nuclear@13 | 41 SceneNode(); |
nuclear@13 | 42 virtual ~SceneNode(); |
nuclear@13 | 43 |
nuclear@13 | 44 virtual void set_name(const char *name); |
nuclear@13 | 45 virtual const char *get_name() const; |
nuclear@13 | 46 |
nuclear@13 | 47 virtual NodeType get_type() const; |
nuclear@13 | 48 |
nuclear@13 | 49 virtual SceneNode *get_parent(); |
nuclear@13 | 50 virtual const SceneNode *get_parent() const; |
nuclear@13 | 51 |
nuclear@13 | 52 // children management |
nuclear@13 | 53 virtual void add_child(SceneNode *child); |
nuclear@13 | 54 virtual void remove_child(SceneNode *child); |
nuclear@13 | 55 |
nuclear@13 | 56 virtual int get_children_count() const; |
nuclear@13 | 57 virtual SceneNode *get_child(int idx); |
nuclear@13 | 58 virtual const SceneNode *get_child(int idx) const; |
nuclear@13 | 59 |
nuclear@13 | 60 virtual void set_position(const Vector3 &pos); |
nuclear@13 | 61 virtual Vector3 get_node_position() const; |
nuclear@13 | 62 |
nuclear@13 | 63 virtual void set_rotation(const Quat &quat); |
nuclear@13 | 64 virtual Quat get_node_rotation() const; |
nuclear@13 | 65 |
nuclear@13 | 66 virtual void set_scaling(const Vector3 &scale); |
nuclear@13 | 67 virtual Vector3 get_node_scaling() const; |
nuclear@13 | 68 |
nuclear@13 | 69 // these take hierarchy into account |
nuclear@13 | 70 virtual Vector3 get_position() const; |
nuclear@13 | 71 virtual Quat get_rotation() const; |
nuclear@13 | 72 virtual Vector3 get_scaling() const; |
nuclear@13 | 73 |
nuclear@13 | 74 virtual void set_pivot(const Vector3 &pivot); |
nuclear@13 | 75 virtual Vector3 get_pivot() const; |
nuclear@13 | 76 |
nuclear@13 | 77 virtual const Matrix4x4 &get_matrix() const; |
nuclear@13 | 78 virtual const Matrix4x4 &get_inv_matrix() const; |
nuclear@13 | 79 |
nuclear@13 | 80 virtual void draw() const; |
nuclear@13 | 81 |
nuclear@13 | 82 virtual bool intersect(const Ray &ray, float *dist = 0) const; |
nuclear@13 | 83 }; |
nuclear@13 | 84 |
nuclear@13 | 85 #endif /* SCENE_NODE_H_ */ |