rayzor

annotate src/snode.h @ 14:a9a948809c6f

starting the renderer screen, plus misc stuff
author John Tsiombikas <nuclear@member.fsf.org>
date Sun, 13 Apr 2014 08:06:21 +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_ */