rayzor

view 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
line source
1 #ifndef SCENE_NODE_H_
2 #define SCENE_NODE_H_
4 #include "vector.h"
5 #include "vmath.h"
6 #include "quat.h"
7 #include "vmathmat.h"
8 #include "vmathray.h"
9 #include "raytrace.h"
11 enum NodeType {
12 NODE_NULL,
13 NODE_OBJECT,
14 NODE_LIGHT,
15 NODE_CAMERA
16 };
18 class SceneNode {
19 protected:
20 char *name;
21 NodeType type;
23 Vector3 pos;
24 Quat rot;
25 Vector3 scale;
26 Vector3 pivot;
28 mutable Matrix4x4 xform, inv_xform;
29 mutable bool xform_valid, inv_xform_valid;
31 vector<SceneNode*> children;
32 SceneNode *parent;
34 SceneNode(const SceneNode &node) {}
35 SceneNode &operator =(const SceneNode &node) { return *this; }
37 void invalidate() const;
38 virtual void calc_matrix() const;
39 virtual void calc_inv_matrix() const;
41 virtual void pre_draw() const;
42 virtual void post_draw() const;
44 public:
45 SceneNode();
46 virtual ~SceneNode();
48 virtual void set_name(const char *name);
49 virtual const char *get_name() const;
51 virtual NodeType get_type() const;
53 virtual SceneNode *get_parent();
54 virtual const SceneNode *get_parent() const;
56 // children management
57 virtual void add_child(SceneNode *child);
58 virtual void remove_child(SceneNode *child);
60 virtual int get_children_count() const;
61 virtual SceneNode *get_child(int idx);
62 virtual const SceneNode *get_child(int idx) const;
64 virtual void set_position(const Vector3 &pos);
65 virtual Vector3 get_node_position() const;
67 virtual void set_rotation(const Quat &quat);
68 virtual Quat get_node_rotation() const;
70 virtual void set_scaling(const Vector3 &scale);
71 virtual Vector3 get_node_scaling() const;
73 // these take hierarchy into account
74 virtual Vector3 get_position() const;
75 virtual Quat get_rotation() const;
76 virtual Vector3 get_scaling() const;
78 virtual void set_pivot(const Vector3 &pivot);
79 virtual Vector3 get_pivot() const;
81 virtual const Matrix4x4 &get_matrix() const;
82 virtual const Matrix4x4 &get_inv_matrix() const;
84 virtual void draw(bool emph = false) const;
86 virtual bool intersect(const Ray &ray, RayHit *hit = 0) const;
87 };
89 #endif /* SCENE_NODE_H_ */