rayzor

annotate src/snode.h @ 17:79609d482762

the renderer renders, also fixed an unnoticed matrix conversion problem between scenegraph and min3d
author John Tsiombikas <nuclear@member.fsf.org>
date Mon, 14 Apr 2014 07:34:45 +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_ */