ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libgender/entity.h
Revision: 1.4
Committed: Sun Oct 3 02:37:55 2004 UTC (19 years, 8 months ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.3: +1 -0 lines
Log Message:
add method in entity_container

File Contents

# Content
1 #ifndef ENTITY_H
2 #define ENTITY_H
3
4 #include <GL/gl.h>
5
6 #include <vector>
7
8 #include "oct.h"
9
10 using namespace std;
11
12 typedef unsigned int soffs; // 32 bit
13 const soffs soffs_max = 1UL << 31;
14
15 #define GLFLOAT_MAX 1e30
16 #define GLFLOAT_MIN -1e30
17
18 struct sector {
19 soffs x, y, z;
20 };
21
22 struct point {
23 GLfloat x, y, z;
24
25 point () { };
26 point (GLfloat x, GLfloat y, GLfloat z) : x(x), y(y), z(z) { };
27 };
28
29 struct colour {
30 GLfloat r, g, b;
31 colour (GLfloat r = 1., GLfloat g = 1., GLfloat b = 1.) : r(r), g(g), b(b) { };
32 };
33
34 struct vec3 {
35 GLfloat x, y, z;
36 vec3 () { };
37 vec3 (GLfloat x, GLfloat y, GLfloat z) : x(x), y(y), z(z) { };
38
39 const vec3 operator -() const
40 { return vec3 (-x, -y, -z); }
41 };
42
43 const vec3 cross (const vec3 &a, const vec3 &b);
44 GLfloat dot (const vec3 &a, const vec3 &b);
45
46 struct texc {
47 GLfloat s, t;
48 texc () { };
49 texc (GLfloat s, GLfloat t) : s(s), t(t) { };
50 };
51
52 struct box {
53 point a, b;
54
55 void reset ()
56 {
57 a = point (GLFLOAT_MAX, GLFLOAT_MAX, GLFLOAT_MAX);
58 b = point (GLFLOAT_MIN, GLFLOAT_MIN, GLFLOAT_MIN);
59 }
60
61 void add (const box &o);
62 };
63
64 struct entity_base {
65 struct entity_base *parent;
66 vector<octant *> o;
67 box bbox;
68
69 virtual void update_bbox ();
70 virtual void show (const sector &sec) { };
71 void hide ();
72 virtual void draw () = 0;
73 virtual ~entity_base ()
74 {
75 hide ();
76 };
77 };
78
79 struct entity_container : entity_base, protected vector<entity_base *> {
80 void add (entity_base *e) { push_back (e); e->parent = this; }
81 void update_bbox ();
82 void show (const sector &sec);
83 void draw ();
84 ~entity_container ();
85 };
86
87 struct entity_filter : entity_base {
88 protected:
89 entity_base *e;
90 public:
91
92 void set (entity_base *e)
93 {
94 this->e = e;
95 e->parent = this;
96 }
97
98 void remove ()
99 {
100 this->e->parent = 0;
101 this->e = 0;
102 }
103
104 entity_base *content () { return e; };
105
106 void update_bbox ();
107 void show (const sector &sec);
108 void draw ();
109 ~entity_filter ();
110 };
111
112 struct entity : entity_filter {
113 sector sec;
114
115 void show (const sector &sec);
116 void show ();
117 void draw ();
118 };
119
120 struct entity_affine : entity_filter {
121 //matrix m;
122 };
123
124 struct vertex1d {
125 colour c; // colour
126 point p; // vertex
127 };
128
129 struct vertex2d {
130 colour c; // colour
131 point p; // vertex
132 vec3 n; // normal
133 texc t; // texture
134
135 vertex2d () { };
136 vertex2d (colour c, point p, vec3 n, texc t = texc()) : c(c), p(p), n(n), t(t) { };
137 };
138
139 template<GLenum type>
140 struct entity_opengl1d : entity_base, vector<vertex1d> {
141 void update_bbox ();
142 void show (const sector &sec);
143 void draw ();
144 };
145
146 template<GLenum type>
147 struct entity_opengl2d : entity_base, vector<vertex2d> {
148 void update_bbox ();
149 void show (const sector &sec);
150 void draw ();
151 };
152
153 typedef entity_opengl1d<GL_POINTS> entity_points;
154 typedef entity_opengl1d<GL_LINES> entity_lines;
155 typedef entity_opengl1d<GL_LINE_STRIP> entity_line_strip;
156 typedef entity_opengl1d<GL_LINE_LOOP> entity_line_loop;
157 typedef entity_opengl2d<GL_TRIANGLES> entity_triangles;
158 typedef entity_opengl2d<GL_TRIANGLE_STRIP> entity_triangle_strip;
159 typedef entity_opengl2d<GL_TRIANGLE_FAN> entity_triangle_fan;
160 typedef entity_opengl2d<GL_QUADS> entity_quads;
161 typedef entity_opengl2d<GL_QUAD_STRIP> entity_quad_strip;
162 typedef entity_opengl2d<GL_POLYGON> entity_polygon;
163
164 struct light {
165 point p;
166 colour c;
167 GLfloat intensity;
168 GLfloat radius;
169 };
170
171 struct draw_context {
172 enum { DEPTH, AMBIENT, LIGHTED } mode;
173 light *l;
174 };
175
176 struct view {
177 point p;
178 vec3 d, u;
179 float fov;
180 int w, h;
181
182 void draw (const draw_context &c);
183 };
184
185 #endif
186
187
188