69 glScalef(0.5f, 1.f, 1.f);
71 glScalef(1.f, 0.25f, 0.5f);
72 glTranslatef(-0.5f, 0.5f, 0.f);
73 glColor3f(1.0f, 0.3f, 0.3f);
78 glScalef(1.f, 0.25f, 0.5f);
79 glTranslatef(-0.5f, -0.5f, 0.f);
80 glColor3f(1.0f, 0.1f, 0.1f);
85 glScalef(1.f, 0.25f, 0.5f);
86 glTranslatef(+0.5f, 0.5f, 0.f);
87 glColor3f(0.3f, 0.3f, 1.0f);
92 glScalef(1.f, 0.25f, 0.5f);
93 glTranslatef(+0.5f, -0.5f, 0.f);
94 glColor3f(0.1f, 0.1f, 1.f);
100void drawBox(GLfloat l, GLfloat w, GLfloat h) {
101 GLfloat sx = l * 0.5f;
102 GLfloat sy = w * 0.5f;
103 GLfloat sz = h * 0.5f;
107 glNormal3f(0.0f, 0.0f, -1.0f);
108 glVertex3f(-sx, -sy, -sz);
109 glVertex3f(-sx, sy, -sz);
110 glVertex3f(sx, sy, -sz);
111 glVertex3f(sx, -sy, -sz);
113 glNormal3f(0.0f, 0.0f, 1.0f);
114 glVertex3f(-sx, -sy, sz);
115 glVertex3f(-sx, sy, sz);
116 glVertex3f(sx, sy, sz);
117 glVertex3f(sx, -sy, sz);
119 glNormal3f(-1.0f, 0.0f, 0.0f);
120 glVertex3f(-sx, -sy, -sz);
121 glVertex3f(-sx, sy, -sz);
122 glVertex3f(-sx, sy, sz);
123 glVertex3f(-sx, -sy, sz);
125 glNormal3f(1.0f, 0.0f, 0.0f);
126 glVertex3f(sx, -sy, -sz);
127 glVertex3f(sx, sy, -sz);
128 glVertex3f(sx, sy, sz);
129 glVertex3f(sx, -sy, sz);
131 glNormal3f(0.0f, -1.0f, 0.0f);
132 glVertex3f(-sx, -sy, -sz);
133 glVertex3f(sx, -sy, -sz);
134 glVertex3f(sx, -sy, sz);
135 glVertex3f(-sx, -sy, sz);
137 glNormal3f(0.0f, 1.0f, 0.0f);
138 glVertex3f(-sx, sy, -sz);
139 glVertex3f(sx, sy, -sz);
140 glVertex3f(sx, sy, sz);
141 glVertex3f(-sx, sy, sz);
227void drawSlice(GLfloat radius, GLfloat height, GLfloat fov,
228 int slices_per_circle) {
229 double fov_rad = fov / 180. * M_PI;
230 int num_slices = int(slices_per_circle * (fov_rad / (2 * M_PI))) + 1;
231 double angle_step = fov_rad / num_slices;
232 double angle_step_half = angle_step * 0.5;
234 GLfloat height_half = height * 0.5f;
235 GLfloat lower_z = -height_half;
236 GLfloat upper_z = height_half;
238 GLfloat last_x = float(std::cos(-fov_rad * 0.5f) * radius);
239 GLfloat last_y = float(std::sin(-fov_rad * 0.5f) * radius);
242 glBegin(GL_TRIANGLES);
243 glNormal3f((
float)std::sin(-fov_rad * 0.5), (
float)-std::cos(-fov_rad * 0.5),
245 glVertex3f(0.f, 0.f, upper_z);
246 glVertex3f(0.f, 0.f, lower_z);
247 glVertex3f(last_x, last_y, upper_z);
248 glVertex3f(last_x, last_y, upper_z);
249 glVertex3f(last_x, last_y, lower_z);
250 glVertex3f(0.f, 0.f, lower_z);
252 double start_angle = -0.5 * fov_rad + angle_step;
253 double angle = start_angle;
254 for (
int i = 0; i < num_slices; ++i) {
255 GLfloat x = float(std::cos(angle) * radius);
256 GLfloat y = float(std::sin(angle) * radius);
257 GLfloat front_normal_x = (float)std::cos(angle + angle_step_half);
258 GLfloat front_normal_y = (float)std::sin(angle + angle_step_half);
261 glNormal3f(0.f, 0.f, -1.f);
262 glVertex3f(0.f, 0.f, lower_z);
263 glVertex3f(x, y, lower_z);
264 glVertex3f(last_x, last_y, lower_z);
266 glNormal3f(0.f, 0.f, 1.f);
267 glVertex3f(0.f, 0.f, upper_z);
268 glVertex3f(x, y, upper_z);
269 glVertex3f(last_x, last_y, upper_z);
271 glNormal3f(front_normal_x, front_normal_y, 0.f);
272 glVertex3f(last_x, last_y, upper_z);
273 glVertex3f(last_x, last_y, lower_z);
274 glVertex3f(x, y, upper_z);
275 glVertex3f(x, y, upper_z);
276 glVertex3f(x, y, lower_z);
277 glVertex3f(last_x, last_y, lower_z);
284 glNormal3f(
float(-std::sin(fov_rad * 0.5)),
float(std::cos(fov_rad * 0.5)),
286 glVertex3f(0.f, 0.f, upper_z);
287 glVertex3f(0.f, 0.f, lower_z);
288 glVertex3f(last_x, last_y, upper_z);
289 glVertex3f(last_x, last_y, upper_z);
290 glVertex3f(last_x, last_y, lower_z);
291 glVertex3f(0.f, 0.f, lower_z);