ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libgender/entity.h
Revision: 1.1
Committed: Sat Oct 2 15:54:43 2004 UTC (19 years, 8 months ago) by root
Content type: text/plain
Branch: MAIN
Log Message:
*** empty log message ***

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
26 struct colour {
27 GLfloat r, g, b;
28 };
29
30 struct vect {
31 GLfloat x, y, z;
32 };
33
34 struct texc {
35 GLfloat u, v;
36 };
37
38 struct box {
39 point a, b;
40
41 void reset ()
42 {
43 a.x = a.y = a.z = GLFLOAT_MAX;
44 b.x = b.y = b.z = GLFLOAT_MIN;
45 }
46
47 void add (const box &o);
48 };
49
50 struct entity_base {
51 struct entity_base *parent;
52 vector<octant *> o;
53 box bbox;
54
55 virtual void update_bbox ();
56 virtual void show (const sector &sec) { };
57 void hide ();
58 virtual void draw () = 0;
59 virtual ~entity_base ()
60 {
61 hide ();
62 };
63 };
64
65 struct entity_container : entity_base, protected vector<entity_base *> {
66 void update_bbox ();
67 void show (const sector &sec);
68 void draw ();
69 ~entity_container ();
70 };
71
72 struct entity_filter : entity_base {
73 protected:
74 entity_base *e;
75 public:
76
77 void set (entity_base *e)
78 {
79 this->e = e;
80 e->parent = this;
81 }
82
83 void remove ()
84 {
85 this->e->parent = 0;
86 this->e = 0;
87 }
88
89 entity_base *content () { return e; };
90
91 void update_bbox ();
92 void show (const sector &sec);
93 void draw ();
94 ~entity_filter ();
95 };
96
97 struct entity : entity_filter {
98 sector sec;
99
100 void show (const sector &sec);
101 void draw ();
102 };
103
104 struct entity_affine : entity_filter {
105 //matrix m;
106 };
107
108 struct vertex1d {
109 point v; // vertex
110 colour c; // colour
111 };
112
113 struct vertex2d {
114 point v; // vertex
115 colour c; // colour
116 vect n; // normal
117 texc t; // texture
118 };
119
120 template<GLenum type>
121 struct entity_opengl1d : entity_base, vector<vertex1d> {
122 void update_bbox ();
123 void show (const sector &sec);
124 void draw ();
125 };
126
127 template<GLenum type>
128 struct entity_opengl2d : entity_base, vector<vertex2d> {
129 void update_bbox ();
130 void show (const sector &sec);
131 void draw ();
132 };
133
134 typedef entity_opengl1d<GL_POINTS> entity_points;
135 typedef entity_opengl1d<GL_LINES> entity_lines;
136 typedef entity_opengl1d<GL_LINE_STRIP> entity_linestrip;
137 typedef entity_opengl1d<GL_LINE_LOOP> entity_lineloop;
138 typedef entity_opengl2d<GL_TRIANGLES> entity_triangles;
139 typedef entity_opengl2d<GL_TRIANGLE_STRIP> entity_trianglestrip;
140 typedef entity_opengl2d<GL_TRIANGLE_FAN> entity_trianglefan;
141 typedef entity_opengl2d<GL_QUADS> entity_quads;
142 typedef entity_opengl2d<GL_QUAD_STRIP> entity_quad_strip;
143 typedef entity_opengl2d<GL_POLYGON> entity_polygon;
144
145 #endif
146
147
148