ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libgender/entity.h
Revision: 1.31
Committed: Thu Nov 4 04:46:58 2004 UTC (19 years, 7 months ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.30: +2 -1 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 #ifndef ENTITY_H
2     #define ENTITY_H
3    
4 root 1.22 #include <vector>
5 root 1.1
6 root 1.22 #include "opengl.h"
7 root 1.1
8 root 1.5 #include "util.h"
9 root 1.1 #include "oct.h"
10 root 1.8 #include "view.h"
11 root 1.22 #include "material.h"
12 root 1.1
13     using namespace std;
14 root 1.24 using namespace gl;
15 root 1.1
16 root 1.22 struct geometry
17     {
18 root 1.19 geometry *parent;
19 root 1.1 box bbox;
20    
21 root 1.19 virtual void update ()
22 root 1.15 {
23 root 1.19 if (parent)
24     parent->update ();
25 root 1.15 }
26    
27 root 1.19 virtual void draw (view &ctx) = 0;
28     geometry (geometry *parent = 0) : parent(parent) { };
29     virtual ~geometry ();
30 root 1.1 };
31    
32 root 1.22 struct geometry_opengl : geometry
33     {
34 root 1.19 GLuint list; // TODO: dynamic caching
35 root 1.13
36 root 1.19 geometry_opengl ();
37     ~geometry_opengl ();
38 root 1.1 };
39    
40     template<GLenum type>
41 root 1.24 struct geometry_opengl1d : geometry_opengl, vector<vertex_v3f>
42 root 1.22 {
43 root 1.24 void set (const vector<vertex_v3f> &v);
44 root 1.18 void draw (view &ctx);
45 root 1.1 };
46    
47     template<GLenum type>
48 root 1.22 struct geometry_opengl2d : geometry_opengl
49     {
50     material *m;
51    
52     geometry_opengl2d () : m(0) { };
53 root 1.6
54 root 1.24 void set (const vector<vertex_t2f_n3f_v3f> &v);
55 root 1.18 void draw (view &ctx);
56 root 1.1 };
57    
58 root 1.19 typedef geometry_opengl1d<GL_POINTS> geometry_points;
59     typedef geometry_opengl1d<GL_LINES> geometry_lines;
60     typedef geometry_opengl1d<GL_LINE_STRIP> geometry_line_strip;
61     typedef geometry_opengl1d<GL_LINE_LOOP> geometry_line_loop;
62     typedef geometry_opengl2d<GL_TRIANGLES> geometry_triangles;
63     typedef geometry_opengl2d<GL_TRIANGLE_STRIP> geometry_triangle_strip;
64     typedef geometry_opengl2d<GL_TRIANGLE_FAN> geometry_triangle_fan;
65     typedef geometry_opengl2d<GL_QUADS> geometry_quads;
66     typedef geometry_opengl2d<GL_QUAD_STRIP> geometry_quad_strip;
67     typedef geometry_opengl2d<GL_POLYGON> geometry_polygon;
68 root 1.20
69 root 1.24 struct geometry_nurbs : geometry, vector<vertex_t2f_n3f_v3f>
70 root 1.22 {
71 root 1.20 GLUnurbsObj *nurb;
72 root 1.21 GLUtesselator *tess;
73 root 1.20 GLfloat ctlpoints[4][4][3];
74    
75 root 1.21 geometry_nurbs() : tess(0), nurb(0) { }
76 root 1.20 virtual void draw (view &ctx);
77     void set ();
78     };
79 root 1.11
80 root 1.23 struct geometry_sphere : geometry
81     {
82 root 1.31 material *m;
83 root 1.23 GLfloat radius;
84    
85     void update ();
86     void draw (view &ctx);
87 root 1.31 geometry_sphere (material *m, GLfloat radius) : m(m), radius(radius) { update (); };
88 root 1.23 };
89    
90     /////////////////////////////////////////////////////////////////////////////
91    
92 root 1.22 struct geometry_filter : geometry
93     {
94 root 1.16 protected:
95 root 1.19 geometry *g;
96 root 1.16 public:
97 root 1.11
98 root 1.19 void set (geometry *g);
99    
100     geometry *content () { return g; };
101 root 1.11
102 root 1.16 void update ();
103 root 1.11 void show ();
104 root 1.18 void draw (view &ctx);
105 root 1.19 geometry_filter (geometry *g = 0) { set (g); }
106     ~geometry_filter ();
107     };
108    
109 root 1.22 struct geometry_transform : geometry_filter
110     {
111 root 1.19 protected:
112     matrix m;
113     public:
114     void update ();
115    
116     void show ();
117     void draw (view &ctx);
118 root 1.17 void set_matrix (const matrix &xfrm);
119     void update (const matrix &xfrm);
120 root 1.19
121     geometry_transform (geometry *g) : geometry_filter(g), m(1) { };
122     geometry_transform () : geometry_filter(0), m(1) { };
123 root 1.11 };
124 root 1.1
125 root 1.22 struct geometry_anim : geometry_transform
126     {
127 root 1.12 GLfloat vx, vy, vz;
128 root 1.18 void draw (view &ctx);
129 root 1.19 };
130    
131 root 1.22 struct geometry_container : geometry, protected vector<geometry *>
132     {
133 root 1.19 void update ();
134    
135     void add (geometry *g);
136     void draw (view &ctx);
137     ~geometry_container ();
138     };
139    
140     /////////////////////////////////////////////////////////////////////////////
141    
142 root 1.22 struct entity : geometry_filter
143     {
144 root 1.19 sector orig;
145     point p;
146     sector a, b; // bounding box corners
147    
148     vector<octant *> o;
149    
150     void update ();
151     void draw (view &ctx);
152    
153     void move (const vec3 &v);
154    
155 root 1.22 virtual void show ();
156     virtual void hide ();
157 root 1.19
158     entity (geometry *g = 0);
159     ~entity ();
160 root 1.12 };
161 root 1.22
162 root 1.30 struct entity_light : entity
163 root 1.22 {
164 root 1.30 light *lview;
165 root 1.22 };
166    
167 root 1.27 /////////////////////////////////////////////////////////////////////////////
168     //
169     // VERY EXPERIMENTAL HEIGHTMAP
170    
171     struct geometry_heightfield : geometry
172     {
173     struct node;
174    
175     node *tree;
176    
177 root 1.29 GLfloat sx, sy, sm;
178    
179 root 1.27 void update ();
180     void draw (view &ctx);
181 root 1.28 geometry_heightfield (GLfloat sx, GLfloat sy);
182 root 1.27 };
183    
184 root 1.1 #endif
185    
186    
187