1 /****************************************************************/
2 /* code copyright 1995-1996 Andrew Johnson - ALL RIGHTS RESERVED*/
3 /* ajohnson@eecs.uic.edu */
4 /* */
5 /* Electronic Visualization Lab (M/C 154) */
6 /* University of Illinois at Chicago */
7 /* 851 South Morgan St. Room 1120 SEO */
8 /* Chicago, IL 60607-7053 */
9 /* */
10 /* (312) 996-3002 (312) 413-7585 FAX */
11 /***********************************************************************/
12 /* objects.c v 1.3 */
13 /* routines to build the objects for battalion */
14 /***********************************************************************/
15
16 #include "battalion.h"
17
18 /*************/
19 /* colours */
20 /*************/
21
22 extern float colorolive[4];
23 extern float planeGreen[4];
24 extern float planeGreen2[4];
25 extern float planeGreen3[4];
26 extern float colorgreen[4];
27
28 extern float colorblack[4];
29
30 extern float colorred[4];
31 extern float colorred_50[4];
32 extern float colorred2[4];
33 extern float colorred3[4];
34
35 extern float colormaserblue[4];
36 extern float colormaserblue2[4];
37
38 extern float colorwhite[4];
39 extern float colorwhite2[4];
40
41 extern float colorsnow[4];
42 extern float colorsnow2[4];
43
44 extern float colorgrey1[4];
45 extern float colorgrey1_50[4];
46 extern float colorgrey2[4];
47 extern float colorgrey3[4];
48 extern float colorgrey3_50[4];
49 extern float colorgrey4[4];
50
51 extern float colorbrown[4];
52 extern float colorbeige[4];
53
54 extern float colorblue[4];
55 extern float colorwater[4];
56
57 extern float colorsnowvapour[4];
58
59 extern float coloryellow[4];
60 extern float colormaseryellow[4];
61 extern float colororange[4];
62
63 extern float healthGreen[4];
64
65 extern float treeColor[4];
66 extern float treeColor2[4];
67
68
69 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
70
makeMonsterLookat()71 GLuint makeMonsterLookat()
72 {
73 GLuint O;
74
75 O = glGenLists(1);
76 glNewList(O, GL_COMPILE);
77
78 gluLookAt(0, PLANEY + 2.4, 0.1, 0, PLANEY, 1, 0, 1, 0);
79
80 glEndList();
81 return(O);
82 }
83
84 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
85
makeOverviewLookat()86 GLuint makeOverviewLookat()
87 {
88 GLuint O;
89
90 O = glGenLists(1);
91 glNewList(O, GL_COMPILE);
92
93 gluLookAt( 0, 0, 9 , 0, 0, 0, 0,1,0);
94
95 glEndList();
96 return(O);
97 }
98
99 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
100 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
101 /* create object for tech's shell */
102 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
103
makeshell2()104 GLuint makeshell2()
105 {
106 GLuint O;
107
108 O = glGenLists(1);
109 glNewList(O, GL_COMPILE);
110
111 makerbluecube(0, 0, 0, 0.04, 0.04, 0.04, colorred2);
112
113 glEndList();
114 return(O);
115 }
116
117 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
118
makeWaterShell()119 GLuint makeWaterShell()
120 {
121 GLuint O;
122
123 O = glGenLists(1);
124 glNewList(O, GL_COMPILE);
125
126 makerbluecube(0, 0, 0, 0.02, 0.02, 0.02, colormaserblue2);
127
128 glEndList();
129 return(O);
130 }
131
132
133 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
134
makeHeroShell()135 GLuint makeHeroShell()
136 {
137 GLuint O;
138
139 O = glGenLists(1);
140 glNewList(O, GL_COMPILE);
141
142 makerbluecube(0, 0, 0, 0.03, 0.03, 0.03, colormaserblue2);
143
144 glEndList();
145 return(O);
146 }
147
148
149
150
151 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
152
makeTankShadow()153 GLuint makeTankShadow()
154 {
155 GLuint O;
156
157 O = glGenLists(1);
158 glNewList(O, GL_COMPILE);
159
160 glColor4fv(colorblack);
161
162 shadow (0, 0 , 0.16, 0.16);
163
164 glEndList();
165 return(O);
166 }
167
168 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
169
makePlaneShadow()170 GLuint makePlaneShadow()
171 {
172 GLuint O;
173
174 float p1[3] = {0.12, SHADOWS, 0.4};
175 float p2[3] = {-0.12, SHADOWS, 0.4};
176 float p3[3] = {0, SHADOWS, 0.8};
177
178 float p4[3] = {0.4, SHADOWS, 0.1};
179 float p5[3] = {-0.4, SHADOWS, 0.1};
180 float p6[3] = {0, SHADOWS, 0.2};
181
182 O = glGenLists(1);
183 glNewList(O, GL_COMPILE);
184
185 glColor4fv(colorblack);
186
187 shadow (0, -0.1 , 0.12, 0.5);
188 shadow (0, 0 , 0.4, 0.1);
189 shadow (0, -.5 , 0.2, 0.05);
190
191 glBegin(GL_TRIANGLES);
192 glVertex3fv(p1);
193 glVertex3fv(p2);
194 glVertex3fv(p3);
195
196 glVertex3fv(p4);
197 glVertex3fv(p5);
198 glVertex3fv(p6);
199 glEnd();
200
201 glEndList();
202 return(O);
203 }
204
205 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
206
makeFighterShadow()207 GLuint makeFighterShadow()
208 {
209 GLuint O;
210
211 float p7[3] = {0.2, SHADOWS, 0.13};
212 float p8[3] = {-0.2, SHADOWS, 0.13};
213 float p9[3] = {0, SHADOWS, 0.33};
214
215 float p10[3] = {0, SHADOWS, -0.33};
216 float p11[3] = {-0.33, SHADOWS, 0};
217 float p12[3] = {0.33, SHADOWS, 0};
218
219 float p13[3] = {0.08, SHADOWS, 0.26};
220 float p14[3] = {-0.08, SHADOWS, 0.26};
221 float p15[3] = {0, SHADOWS, 0.54};
222
223 O = glGenLists(1);
224 glNewList(O, GL_COMPILE);
225
226 glColor4fv(colorblack);
227
228 shadow (0, -0.066 , 0.08, 0.33);
229 shadow (0, -.33 , 0.13, 0.033);
230
231 glBegin(GL_TRIANGLES);
232 glVertex3fv(p13);
233 glVertex3fv(p14);
234 glVertex3fv(p15);
235
236 glVertex3fv(p7);
237 glVertex3fv(p8);
238 glVertex3fv(p9);
239
240 glVertex3fv(p10);
241 glVertex3fv(p11);
242 glVertex3fv(p12);
243 glEnd();
244
245 glEndList();
246 return(O);
247 }
248
249 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
250 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
251 /* create object for an operational plain tank */
252 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
253
makeTank()254 GLuint makeTank()
255 {
256 GLuint O;
257
258 /***************/
259 /* tank barrel */
260 /****************/
261
262 float gun[8][3] = {
263 -0.03, 0.280, 0.23,
264 -0.03, 0.220, 0.24,
265 0.03, 0.220, 0.24,
266 0.03, 0.280, 0.23,
267 0.03, 0.225, 0.09,
268 0.03, 0.165, 0.09,
269 -0.03, 0.165, 0.09,
270 -0.03, 0.225, 0.09 };
271
272
273 O = glGenLists(1);
274 glNewList(O, GL_COMPILE);
275
276 makeitPyr(11, colorgrey2, -0.12, 0.075, 0.0, 0.075, 0.075, 0.18);
277 makeitPyr(11, colorgrey2, 0.12, 0.075, 0.0, 0.075, 0.075, 0.18);
278
279 makercubenobtm(0.0, 0.15, 0.0, 0.15, 0.03, 0.225, colorolive);
280 makercubenobtm(0.0, 0.195, 0.0, 0.09, 0.045, 0.09, colorgrey1);
281
282 maker(gun, 0, 0, 0, 1, 1, 1, colorwhite, 1, 0.8, 0.66, 0.5);
283
284 glEndList();
285 return(O);
286 }
287
288 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
289 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
290 /* create object for melting plain tank */
291 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
292
makeSlagTank()293 GLuint makeSlagTank()
294 {
295 GLuint O;
296
297 /***************/
298 /* tank barrel */
299 /****************/
300
301 float gun[8][3] = {
302 -0.03, 0.280, 0.23,
303 -0.03, 0.220, 0.24,
304 0.03, 0.220, 0.24,
305 0.03, 0.280, 0.23,
306 0.03, 0.225, 0.09,
307 0.03, 0.165, 0.09,
308 -0.03, 0.165, 0.09,
309 -0.03, 0.225, 0.09 };
310
311
312 O = glGenLists(1);
313 glNewList(O, GL_COMPILE);
314
315 makeitPyr(11, colorwhite, -0.12, 0.075, 0.0, 0.075, 0.075, 0.18);
316 makeitPyr(11, colorwhite, 0.12, 0.075, 0.0, 0.075, 0.075, 0.18);
317
318 makercubenobtm(0.0, 0.15, 0.0, 0.15, 0.03, 0.225, colorwhite);
319 makercubenobtm(0.0, 0.195, 0.0, 0.09, 0.045, 0.09, colorwhite);
320
321 maker(gun, 0, 0, 0, 1, 1, 1, colorwhite, 1, 0.8, 0.66, 0.5);
322
323 glEndList();
324 return(O);
325 }
326
327
328 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
329
makeLauncherTank()330 GLuint makeLauncherTank()
331 {
332 GLuint O;
333
334 O = glGenLists(1);
335 glNewList(O, GL_COMPILE);
336
337 makeitPyr(11, colorgrey2, -0.12, 0.075, 0.0, 0.075, 0.075, 0.18);
338 makeitPyr(11, colorgrey2, 0.12, 0.075, 0.0, 0.075, 0.075, 0.18);
339
340 makercubenobtm(0.0, 0.15, 0.0, 0.15, 0.03, 0.225, colorwhite);
341
342 makercube(0.0, 0.26, 0.075, 0.12, 0.01, 0.075, colorgrey2);
343
344 makercubenobtm(-0.05, 0.2, 0.075, 0.01, 0.07, 0.01, colorgrey2);
345 makercubenobtm(0.05, 0.2, 0.075, 0.01, 0.07, 0.01, colorgrey2);
346
347 makercube(0.0, 0.28, 0.075, 0.02, 0.02, 0.1, colorgrey1);
348 makercube(-0.05, 0.28, 0.075, 0.02, 0.02, 0.1, colorgrey1);
349 makercube(0.05, 0.28, 0.075, 0.02, 0.02, 0.1, colorgrey1);
350 makercube(-0.1, 0.28, 0.075, 0.02, 0.02, 0.1, colorgrey1);
351 makercube(0.1, 0.28, 0.075, 0.02, 0.02, 0.1, colorgrey1);
352
353 makercube(0.0, 0.28, 0.05, 0.021, 0.021, 0.02, colorred);
354 makercube(-0.05, 0.28, 0.05, 0.021, 0.021, 0.02, colorred);
355 makercube(0.05, 0.28, 0.05, 0.021, 0.021, 0.02, colorred);
356 makercube(-0.1, 0.28, 0.05, 0.021, 0.021, 0.02, colorred);
357 makercube(0.1, 0.28, 0.05, 0.021, 0.021, 0.02, colorred);
358
359 glEndList();
360 return(O);
361 }
362
363
364 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
365
makeSlagLauncherTank()366 GLuint makeSlagLauncherTank()
367 {
368 GLuint O;
369
370 O = glGenLists(1);
371 glNewList(O, GL_COMPILE);
372
373 makeitPyr(11, colorwhite, -0.12, 0.075, 0.0, 0.075, 0.075, 0.18);
374 makeitPyr(11, colorwhite, 0.12, 0.075, 0.0, 0.075, 0.075, 0.18);
375
376 makercubenobtm(0.0, 0.15, 0.0, 0.15, 0.03, 0.225, colorwhite);
377
378 makercube(0.0, 0.26, 0.075, 0.12, 0.01, 0.075, colorgrey2);
379
380 makercubenobtm(-0.05, 0.2, 0.075, 0.01, 0.07, 0.01, colorwhite);
381 makercubenobtm(0.05, 0.2, 0.075, 0.01, 0.07, 0.01, colorwhite);
382
383 makercube(0.0, 0.28, 0.075, 0.02, 0.02, 0.1, colorwhite);
384 makercube(-0.05, 0.28, 0.075, 0.02, 0.02, 0.1, colorwhite);
385 makercube(0.05, 0.28, 0.075, 0.02, 0.02, 0.1, colorwhite);
386 makercube(-0.1, 0.28, 0.075, 0.02, 0.02, 0.1, colorwhite);
387 makercube(0.1, 0.28, 0.075, 0.02, 0.02, 0.1, colorwhite);
388
389 makercube(0.0, 0.28, 0.05, 0.021, 0.021, 0.02, colorwhite);
390 makercube(-0.05, 0.28, 0.05, 0.021, 0.021, 0.02, colorwhite);
391 makercube(0.05, 0.28, 0.05, 0.021, 0.021, 0.02, colorwhite);
392 makercube(-0.1, 0.28, 0.05, 0.021, 0.021, 0.02, colorwhite);
393 makercube(0.1, 0.28, 0.05, 0.021, 0.021, 0.02, colorwhite);
394
395 glEndList();
396 return(O);
397 }
398
399 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
400 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
401 /* create object for an operational maser tank */
402 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
403
makeMaserTank()404 GLuint makeMaserTank()
405 {
406 GLuint O;
407
408 /**********************/
409 /* maser tank support */
410 /**********************/
411
412 float support1[8][3] = {
413 -0.1, 1.8, -1.3,
414 -0.1, 1.2, 0.0,
415 0.1, 1.2, 0.0,
416 0.1, 1.8, -1.3,
417 0.1, 1.8, -1.7,
418 0.1, 1.2, -0.4,
419 -0.1, 1.2, -0.4,
420 -0.1, 1.8, -1.7 };
421
422 float support2[8][3] = {
423 -0.1, 2.5, -0.6,
424 -0.1, 1.8, -1.3,
425 0.1, 1.8, -1.3,
426 0.1, 2.5, -0.6,
427 0.1, 2.5, -1.0,
428 0.1, 1.8, -1.7,
429 -0.1, 1.8, -1.7,
430 -0.1, 2.5, -1.0 };
431
432
433 O = glGenLists(1);
434 glNewList(O, GL_COMPILE);
435
436 makercubenobtm(-0.8, 0.5, 0.0, 0.5, 0.5, 1.2, colorblue);
437 makercubenobtm( 0.8, 0.5, 0.0, 0.5, 0.5, 1.2, colorblue);
438
439 makercubenobtm( 0.0, 1.0, 0.0, 1.1, 0.2, 1.75, colorgrey2);
440 makercubenobtm( 0.0, 1.0, -0.5, 0.5, 0.3, 0.5, colorwhite);
441 makercube(0.0, 1.5, 1.25, 1.1, 0.3, 0.5, colorgrey3);
442
443 makercube(0.0, 1.5, 1.752, 0.6, 0.1, 0.01, colorblack);
444
445 makercube(0.0, 2.5, 0.0, 0.4, 0.4, 0.1, colorwhite);
446 makercube(0.0, 2.5, -0.8, 0.2, 0.2, 0.91, colorblue);
447
448 glColor3fv(colorgrey1);
449
450 glBegin(GL_QUAD_STRIP);
451 glVertex3fv(support1[0]);glVertex3fv(support1[1]);glVertex3fv(support1[3]);glVertex3fv(support1[2]);
452 glVertex3fv(support1[4]);glVertex3fv(support1[5]);
453 glVertex3fv(support1[7]);glVertex3fv(support1[6]);
454 glVertex3fv(support1[0]);glVertex3fv(support1[1]);
455 glEnd();
456
457 glBegin(GL_QUAD_STRIP);
458 glVertex3fv(support2[0]);glVertex3fv(support2[1]);glVertex3fv(support2[3]);glVertex3fv(support2[2]);
459 glVertex3fv(support2[4]);glVertex3fv(support2[5]);
460 glVertex3fv(support2[7]);glVertex3fv(support2[6]);
461 glVertex3fv(support2[0]);glVertex3fv(support2[1]);
462 glEnd();
463
464 glEndList();
465 return(O);
466 }
467
468 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
469 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
470 /* create object for melting maser tank */
471 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
472
makeSlagMaserTank()473 GLuint makeSlagMaserTank()
474 {
475 GLuint O;
476
477 /**********************/
478 /* maser tank support */
479 /**********************/
480
481 float support1[8][3] = {
482 -0.1, 1.8, -1.3,
483 -0.1, 1.2, 0.0,
484 0.1, 1.2, 0.0,
485 0.1, 1.8, -1.3,
486 0.1, 1.8, -1.7,
487 0.1, 1.2, -0.4,
488 -0.1, 1.2, -0.4,
489 -0.1, 1.8, -1.7 };
490
491 float support2[8][3] = {
492 -0.1, 2.5, -0.6,
493 -0.1, 1.8, -1.3,
494 0.1, 1.8, -1.3,
495 0.1, 2.5, -0.6,
496 0.1, 2.5, -1.0,
497 0.1, 1.8, -1.7,
498 -0.1, 1.8, -1.7,
499 -0.1, 2.5, -1.0 };
500
501
502 O = glGenLists(1);
503 glNewList(O, GL_COMPILE);
504
505 makercubenobtm( -0.8, 0.5, 0, 0.5,0.5,1.2, colorwhite);
506 makercubenobtm(0.8, 0.5 ,0, 0.5,0.5,1.2, colorwhite);
507
508 makercubenobtm( 0, 1, 0, 1.1, 0.2, 1.75, colorwhite);
509 makercubenobtm( 0, 1, -.5, .5, 0.3, .5, colorwhite);
510 makercube(0.0, 1.5, 1.25, 1.1, 0.3, 0.5, colorwhite);
511
512 makercube(0.0, 1.5, 1.751, 0.6, 0.1, 0.01, colorwhite);
513
514 makercube(0.0, 2.5, 0.0, 0.4, 0.4, 0.1, colorwhite);
515 makercube(0.0, 2.5, -0.8, 0.2, 0.2, 0.91, colorwhite);
516
517 glColor3fv(colorwhite);
518
519 glBegin(GL_QUAD_STRIP);
520 glVertex3fv(support1[0]);glVertex3fv(support1[1]);glVertex3fv(support1[3]);glVertex3fv(support1[2]);
521 glVertex3fv(support1[4]);glVertex3fv(support1[5]);
522 glVertex3fv(support1[7]);glVertex3fv(support1[6]);
523 glVertex3fv(support1[0]);glVertex3fv(support1[1]);
524 glEnd();
525
526 glBegin(GL_QUAD_STRIP);
527 glVertex3fv(support2[0]);glVertex3fv(support2[1]);glVertex3fv(support2[3]);glVertex3fv(support2[2]);
528 glVertex3fv(support2[4]);glVertex3fv(support2[5]);
529 glVertex3fv(support2[7]);glVertex3fv(support2[6]);
530 glVertex3fv(support2[0]);glVertex3fv(support2[1]);
531 glEnd();
532
533 glEndList();
534 return(O);
535 }
536
537 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
538 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
539 /* create object for an operational helicopter */
540 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
541
makeHelo()542 GLuint makeHelo()
543 {
544 GLuint O;
545
546 O = glGenLists(1);
547 glNewList(O, GL_COMPILE);
548
549 makercube(0.0, 0.0, 0.0, 0.1, 0.1, 0.2, colorgrey2);
550 makercube(0.0, -0.0375, -0.225, 0.1, 0.0625, 0.025, colorgrey2);
551
552 makercubenobtm( -0.05, +0.0625, -0.2, 0.025, 0.025, 0.025, colorblack);
553 makercubenobtm( 0.05, +0.0625, -0.2, 0.025, 0.025, 0.025, colorblack);
554
555 makercube(0.0, 0.0, 0.3, 0.0375, 0.0375, 0.1, colorgrey1);
556 makercubenobtmnotop( 0.0, 0.125, 0.0, 0.025, 0.05, 0.025, colorgrey1);
557
558 /**************/
559 /* draw skids */
560 /**************/
561
562 makercube( 0.075, -0.2, 0.0, 0.025, 0.0125, 0.175, colorwhite);
563 makercube(-0.075, -0.2, 0.0, 0.025, 0.0125, 0.175, colorwhite);
564
565 makercubenobtm( 0.075, -0.15, 0.025, 0.0125, 0.05, 0.05, colorgrey1);
566 makercubenobtm( -0.075, -0.15, 0.025, 0.0125, 0.05, 0.05, colorgrey1);
567
568 glEndList();
569 return(O);
570 }
571
572 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
573 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
574 /* create object for melting helicopter */
575 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
576
makeSlagHelo()577 GLuint makeSlagHelo()
578 {
579 GLuint O;
580
581 O = glGenLists(1);
582 glNewList(O, GL_COMPILE);
583
584 makercube(0.0, 0.0, 0.0, 0.1, 0.1, 0.2, colorwhite);
585 makercube(0.0, -0.0375, -0.225, 0.1, 0.0625, 0.025, colorwhite);
586
587 makercubenobtm( -0.05, +0.0625, -0.2, 0.025, 0.025, 0.025,colorwhite);
588 makercubenobtm( 0.05, +0.0625, -0.2, 0.025, 0.025, 0.025, colorwhite);
589
590 makercube(0.0, 0.0, 0.3, 0.0375, 0.0375, 0.1, colorwhite);
591 makercubenobtmnotop( 0.0, 0.125, 0.0, 0.025, 0.05, 0.025, colorwhite);
592
593 /**************/
594 /* draw skids */
595 /**************/
596
597 makercube( 0.075, -0.2, 0.0, 0.025, 0.0125, 0.175, colorwhite);
598 makercube(-0.075, -0.2, 0.0, 0.025, 0.0125, 0.175, colorwhite);
599
600 makercubenobtm( 0.075, -0.15, 0.025, 0.0125, 0.05, 0.05, colorwhite);
601 makercubenobtm(-0.075, -0.15, 0.025, 0.0125, 0.05, 0.05, colorwhite);
602
603 glEndList();
604 return(O);
605 }
606
607 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
608 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
609 /* create object for main rotor of the helicopters */
610 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
611
makeBigRotor()612 GLuint makeBigRotor()
613 {
614 GLuint O;
615
616 O = glGenLists(1);
617 glNewList(O, GL_COMPILE);
618
619 makercube(0.0, 0.175, 0.0, 0.025, 0.01, 0.3, colorwhite);
620 makercube(0.0, 0.175, 0.0, 0.3, 0.01, 0.025, colorwhite);
621
622 glEndList();
623 return(O);
624 }
625
626
627 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
628 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
629 /* create object for small rotor of the helicopters */
630 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
631
makeSmallRotor()632 GLuint makeSmallRotor()
633 {
634 GLuint O;
635
636 O = glGenLists(1);
637 glNewList(O, GL_COMPILE);
638
639 makercube(0.0, 0.0, 0.0, 0.0025, 0.15, 0.02, colorwhite);
640
641 glEndList();
642 return(O);
643 }
644
645 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
646 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
647 /* create object for propeller for bomber */
648 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
649
makePropeller()650 GLuint makePropeller()
651 {
652 GLuint O;
653
654 O = glGenLists(1);
655 glNewList(O, GL_COMPILE);
656
657 makercube(0.0, 0.0, 0.0, 0.005, 0.05, 0.001, colorwhite);
658
659 glEndList();
660 return(O);
661 }
662
663 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
664 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
665 /* make bomber body */
666 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
667
makeAirplaneBody()668 GLuint makeAirplaneBody()
669 {
670 GLuint O;
671
672 O = glGenLists(1);
673 glNewList(O, GL_COMPILE);
674
675 /*************/
676 /* draw body */
677 /*************/
678
679 makercube(0.0, 0.0, 0.0, 0.03, 0.03, 0.14, colorwhite);
680
681 glPushMatrix();
682 glTranslatef(0, 0, -0.14);
683 glRotatef(-90, 1, 0, 0);
684 makeitPyr(1, colorwhite, 0.0, 0.08, 0.0, 0.03, 0.08, 0.03);
685 glPopMatrix();
686
687 /*************/
688 /* draw tail */
689 /*************/
690
691 makercube(0.0, 0.07, 0.11, 0.002, 0.04 ,0.02, colorwhite);
692
693 makeitPyr(1, colorwhite, 0.0, 0.03, 0.09, 0.002, 0.08, 0.02);
694
695 /**************/
696 /* draw wings */
697 /**************/
698
699 makercube(0.0, 0.0, -0.01, 0.16, 0.004, 0.02, colorgrey3);
700
701 glPushMatrix();
702 glTranslatef(0, 0, -0.03);
703 glRotatef(-90,1, 0, 0);
704 makeitPyr(1, colorgrey2, 0.0, 0.03, 0, 0.16, 0.03, 0.004);
705 glPopMatrix();
706
707 makercube(0.0, 0.0, 0.11, 0.08, 0.004, 0.015, colorgrey3);
708
709 glPushMatrix();
710 glTranslatef(0, 0, 0.095);
711 glRotatef(-90, 1, 0, 0);
712 makeitPyr(1, colorgrey2, 0.0, 0.02, 0.0, 0.08, 0.02, 0.004);
713 glPopMatrix();
714
715 makercube(-0.09, -0.004-0.01, -0.07+0.02, 0.01, 0.01, 0.02, colorgrey1);
716
717 makercube( 0.09, -0.004-0.01, -0.07+0.02, 0.01, 0.01, 0.02, colorgrey1);
718
719 glEndList();
720 return(O);
721 }
722
723 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
724 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
725 /* make fighter body */
726 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
727
makeFighterBody()728 GLuint makeFighterBody()
729 {
730 GLuint O;
731
732 O = glGenLists(1);
733 glNewList(O, GL_COMPILE);
734
735 /*************/
736 /* draw body */
737 /*************/
738
739 makercube(0.0, 0.0, 0.0, 0.03, 0.03, 0.14, colorwhite);
740
741 glPushMatrix();
742 glTranslatef(0, 0, -0.14);
743 glRotatef(-90, 1, 0, 0);
744 makeitPyr(1, colorwhite, 0.0, 0.08, 0.0, 0.03, 0.08, 0.03);
745 glPopMatrix();
746
747 /*************/
748 /* draw tail */
749 /*************/
750
751 glPushMatrix();
752 glTranslatef(-0.05, 0.05, 0.11);
753 glRotatef(45, 0, 0, 1);
754 makercube(0.0, 0, 0, 0.002, 0.04 ,0.02, colorgrey3);
755 glPopMatrix();
756
757 glPushMatrix();
758 glTranslatef(0.05, 0.05, 0.11);
759 glRotatef(-45, 0, 0, 1);
760 makercube(0.0, 0, 0, 0.002, 0.04 ,0.02, colorgrey3);
761 glPopMatrix();
762
763
764 /**************/
765 /* draw wings */
766 /**************/
767
768 glPushMatrix();
769 glTranslatef(0, 0, 0.03);
770 glRotatef(90, 1, 0, 0);
771 makeitPyr(1, colorgrey3, 0.0, 0.01, 0, 0.16, 0.085, 0.004);
772 glPopMatrix();
773
774 glPushMatrix();
775 glTranslatef(0, 0, 0.03);
776 glRotatef(-90, 1, 0, 0);
777 makeitPyr(1, colorgrey3, 0.0, 0.2, 0, 0.1, 0.04, 0.004);
778 glPopMatrix();
779
780
781 makercube(-0.09, -0.004-0.01, 0.02, 0.01, 0.01, 0.04, colorred);
782
783 makercube( 0.09, -0.004-0.01, 0.02, 0.01, 0.01, 0.04, colorred);
784
785 glEndList();
786 return(O);
787 }
788
789
790 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
791 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
792 /* create object for Googelon's leg */
793 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
794
makeLeg()795 GLuint makeLeg()
796 {
797 GLuint O;
798
799 O = glGenLists(1);
800 glNewList(O, GL_COMPILE);
801
802 makercube( 0.0, PLANEY+0.2, 0.0, 0.1, 0.2, 0.1, colorred);
803 makercube( 0.0, PLANEY+0.06, 0.17, 0.1, 0.06, 0.08, colorred);
804 makercube( 0.05, PLANEY+0.05, 0.25, 0.03, 0.04, 0.05, colorwhite);
805 makercube(-0.05, PLANEY+0.05, 0.25, 0.03, 0.04, 0.05, colorwhite);
806
807 glEndList();
808 return(O);
809 }
810
811 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
812 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
813 /* create object for Googelon's head */
814 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
815
makeHead()816 GLuint makeHead()
817 {
818 GLuint O;
819
820 O = glGenLists(1);
821 glNewList(O, GL_COMPILE);
822
823 makercube(0.0, PLANEY+1.15, 0.0, 0.22, 0.15, 0.1, colorred);
824 makercube(0.0, PLANEY+1.15, -0.1, 0.1, 0.1, 0.1, colorred);
825
826 /**********/
827 /* pupils */
828 /**********/
829
830 makercube( 0.15, PLANEY+1.21, 0.1, 0.03, 0.03, 0.06, colorblack);
831 makercube(-0.15, PLANEY+1.21, 0.1, 0.03, 0.03, 0.06, colorblack);
832
833 /********/
834 /* eyes */
835 /********/
836
837 makercube( 0.15, PLANEY+1.20, 0.1, 0.06, 0.06, 0.05, colorwhite);
838 makercube(-0.15, PLANEY+1.20, 0.1, 0.06, 0.06, 0.05, colorwhite);
839
840
841 glEndList();
842 return(O);
843 }
844
845
makeSimpleHead()846 GLuint makeSimpleHead()
847 {
848 GLuint O;
849
850 O = glGenLists(1);
851 glNewList(O, GL_COMPILE);
852
853 makercubenobtm(0.0, PLANEY+1.15, 0.0, 0.22, 0.15, 0.1, colorred);
854 makercubeTopBack(0.0, PLANEY+1.15, -0.1, 0.1, 0.1, 0.1, colorred);
855
856 /********/
857 /* eyes */
858 /********/
859
860 makercubenobtm( 0.15, PLANEY+1.20, 0.1, 0.06, 0.06, 0.05, colorwhite);
861 makercubenobtm(-0.15, PLANEY+1.20, 0.1, 0.06, 0.06, 0.05, colorwhite);
862
863 /**********/
864 /* pupils */
865 /**********/
866
867 makercubenobtm( 0.15, PLANEY+1.21, 0.1, 0.03, 0.03, 0.06, colorblack);
868 makercubenobtm(-0.15, PLANEY+1.21, 0.1, 0.03, 0.03, 0.06, colorblack);
869
870 glEndList();
871 return(O);
872 }
873
874 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
875 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
876 /* create object for Googelon's tail */
877 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
878
makeTail()879 GLuint makeTail()
880 {
881 GLuint O;
882
883 O = glGenLists(1);
884 glNewList(O, GL_COMPILE);
885
886 makercube(0.0, PLANEY+0.23, -0.2, 0.1, 0.15, 0.2, colorred);
887 makercube(0.0, PLANEY+0.13, -0.35, 0.1, 0.1, 0.15, colorred);
888 makeitPyr(2, colorred, 0, PLANEY+0.13, -0.6, 0.1, 0.1, 0.1);
889
890 /****************/
891 /* dorsal spine */
892 /****************/
893
894 makercubenobtm(0.0, PLANEY+0.4, -0.20, 0.02, 0.06, 0.08, colorwhite);
895 makercube( 0.0, PLANEY+0.7, -0.19, 0.02, 0.06, 0.07, colorwhite);
896
897 glEndList();
898 return(O);
899 }
900
makeSimpleTail()901 GLuint makeSimpleTail()
902 {
903 GLuint O;
904
905 O = glGenLists(1);
906 glNewList(O, GL_COMPILE);
907
908 makercubenobtm(0.0, PLANEY+0.23, -0.2, 0.1, 0.15, 0.2, colorred);
909
910 /****************/
911 /* dorsal spine */
912 /****************/
913
914 makercubenobtm(0.0, PLANEY+0.4, -0.20, 0.02, 0.06, 0.08, colorwhite);
915 makercube( 0.0, PLANEY+0.7, -0.19, 0.02, 0.06, 0.07, colorwhite);
916
917 glEndList();
918 return(O);
919 }
920
921 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
922 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
923 /* create object for an Googelon's body */
924 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
925
makeBody()926 GLuint makeBody()
927 {
928 GLuint O;
929
930 O = glGenLists(1);
931 glNewList(O, GL_COMPILE);
932
933 makercube( 0.0, PLANEY+0.5, 0.0, 0.2, 0.3, 0.2, colorred);
934 makercubenobtm(0.0, PLANEY+0.9, 0.0, 0.15, 0.2, 0.15, colorred);
935
936 glEndList();
937 return(O);
938 }
939
940
941 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
942 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
943 /* create object for flutter's head */
944 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
945
makeFlutterHead()946 GLuint makeFlutterHead()
947 {
948 GLuint O;
949
950 O = glGenLists(1);
951 glNewList(O, GL_COMPILE);
952
953 makercube( 0.0, PLANEY+1.15, 0.05, 0.1, 0.1, 0.05, colorbrown);
954 makercube( 0.07, PLANEY+1.23, 0.11, 0.02, 0.02, 0.02, colorblack);
955 makercube(-0.07, PLANEY+1.23, 0.11, 0.02, 0.02, 0.02, colorblack);
956 makercube( 0.07, PLANEY+1.23, 0.08, 0.04, 0.04, 0.04, colorwhite);
957 makercube(-0.07, PLANEY+1.23, 0.08, 0.04, 0.04, 0.04, colorwhite);
958
959 glEndList();
960 return(O);
961 }
962
963 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
964
makeFlutterShadow()965 GLuint makeFlutterShadow()
966 {
967 GLuint O;
968
969 /********************/
970 /* flutter's shadow */
971 /********************/
972
973 float flutshad1[3] = { 0.1, SHADOWS, -0.1};
974 float flutshad2[3] = {-0.1, SHADOWS, -0.1};
975 float flutshad3[3] = { 0.1, SHADOWS, 0.1};
976 float flutshad4[3] = {-0.1, SHADOWS, 0.1};
977 float flutshad5[3] = { 0, SHADOWS, -0.3};
978 float flutshad6[3] = {0.25, SHADOWS, 0.5};
979 float flutshad7[3] = {0.25, SHADOWS, -0.5};
980 float flutshad8[3] = {-0.25, SHADOWS, -0.5};
981 float flutshad9[3] = {-0.25, SHADOWS, 0.5};
982 float flutshad10[3] = { 0.5, SHADOWS, 0.0};
983 float flutshad11[3] = {-0.5, SHADOWS, 0.0};
984
985 O = glGenLists(1);
986 glNewList(O, GL_COMPILE);
987
988 glColor4fv(colorblack);
989
990 shadow (0, 0, 0.1, 0.1);
991
992 glBegin(GL_TRIANGLES);
993 glVertex3fv(flutshad1);
994 glVertex3fv(flutshad5);
995 glVertex3fv(flutshad2);
996
997 glVertex3fv(flutshad6);
998 glVertex3fv(flutshad10);
999 glVertex3fv(flutshad7);
1000
1001 glVertex3fv(flutshad8);
1002 glVertex3fv(flutshad11);
1003 glVertex3fv(flutshad9);
1004 glEnd();
1005
1006 glBegin(GL_QUADS);
1007 glVertex3fv(flutshad3);
1008 glVertex3fv(flutshad6);
1009 glVertex3fv(flutshad7);
1010 glVertex3fv(flutshad1);
1011
1012 glVertex3fv(flutshad2);
1013 glVertex3fv(flutshad8);
1014 glVertex3fv(flutshad9);
1015 glVertex3fv(flutshad4);
1016 glEnd();
1017
1018
1019 glEndList();
1020 return(O);
1021 }
1022
1023 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1024
makeFlutterXMas()1025 GLuint makeFlutterXMas()
1026 {
1027 float v[4];
1028
1029 GLuint O;
1030
1031 O = glGenLists(1);
1032 glNewList(O, GL_COMPILE);
1033
1034 glPushMatrix();
1035 glTranslatef(0, PLANEY+1.25, -0.1);
1036 glScalef(1.2, 0.45, 1.2);
1037 glColor3fv(colorwhite);
1038 v[0] = v[1] = v[2] = 0;
1039 v[3] = 0.14;
1040 andysphdraw(v, 4);
1041 glPopMatrix();
1042
1043 glPushMatrix();
1044 glTranslatef(-0.15, PLANEY+1.45, -0.25);
1045 glScalef(0.15, 0.2, 0.15);
1046 drawClosedCone(healthGreen, healthGreen, 1);
1047 glPopMatrix();
1048
1049 glPushMatrix();
1050 glTranslatef(-0.09, PLANEY+1.65, -0.06);
1051 glRotatef(.1*(1100), 1, 0, 0);
1052 glRotatef(.1*(450), 0, 0, 1);
1053 glScalef(0.04, 0.11, 0.1);
1054 drawClosedCone(healthGreen, healthGreen, 1);
1055 glPopMatrix();
1056
1057 glColor3fv(colorwhite);
1058 v[0] = -0.15;
1059 v[1] = PLANEY+1.50;
1060 v[2] = -0.0;
1061 v[3] = 0.05;
1062 andysphdraw(v, 4);
1063
1064 glEndList();
1065 return(O);
1066 }
1067
1068 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1069
makeFlutterWing1()1070 GLuint makeFlutterWing1()
1071 {
1072 GLuint O;
1073
1074 O = glGenLists(1);
1075 glNewList(O, GL_COMPILE);
1076
1077 makeitPyr(10, colorbrown, 0.25, 0, 0, 0.15, 0.03, 0.5);
1078 makeitPyr(7, colorbrown, 0.25, 0, 0, 0.25, 0.03, 0.5);
1079
1080 glEndList();
1081 return(O);
1082 }
1083
1084 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1085
makeFlutterWing2()1086 GLuint makeFlutterWing2()
1087 {
1088 GLuint O;
1089
1090 O = glGenLists(1);
1091 glNewList(O, GL_COMPILE);
1092
1093 makeitPyr(9, colorbrown, -0.25, 0, 0, 0.15, 0.03, 0.5);
1094 makeitPyr(8, colorbrown, -0.25, 0, 0, 0.25, 0.03, 0.5);
1095
1096 glEndList();
1097 return(O);
1098 }
1099
1100 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1101
makeFlutterBody()1102 GLuint makeFlutterBody()
1103 {
1104 GLuint O;
1105
1106 O = glGenLists(1);
1107 glNewList(O, GL_COMPILE);
1108
1109 makercube(0.0, PLANEY+1.15, 0.0, 0.1, 0.08, 0.1, colorbrown);
1110
1111 makeitPyr(2, coloryellow, 0.0, PLANEY+1.15, -0.2, 0.1, 0.1, 0.1);
1112
1113 glEndList();
1114 return(O);
1115 }
1116
1117
1118 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1119 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1120 /* create object for tech's body */
1121 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1122
makeTechsBody()1123 GLuint makeTechsBody()
1124 {
1125 int sph;
1126 GLuint O;
1127 float sp[4];
1128
1129 sph =3;
1130
1131 O = glGenLists(1);
1132 glNewList(O, GL_COMPILE);
1133
1134 glColor3fv(colorgrey1);
1135
1136 sp[0] = sp[2] = 0;
1137 sp[1] = PLANEY+ 0.2;
1138 sp[3] = 0.15;
1139 andysphdraw(sp, sph);
1140
1141 makercubenobtm(0, PLANEY+0.6, 0, 0.07, 0.5, 0.07, colorgrey1);
1142
1143 makercube( 0, PLANEY+0.5, 0, 0.2, 0.05, 0.05, colorgrey3);
1144
1145 makercube( 0.22, PLANEY+0.5, 0, 0.025, 0.2, 0.15, colorblack);
1146 makercube( 0.2, PLANEY+0.5, 0, 0.03, 0.25, 0.2, colorgrey2);
1147
1148 makercube(-0.22, PLANEY+0.5, 0, 0.025, 0.2, 0.15, colorblack);
1149 makercube(-0.2, PLANEY+0.5, 0, 0.03, 0.25, 0.2, colorgrey2);
1150
1151 glEndList();
1152 return(O);
1153 }
1154
makeTechsSimpleBody()1155 GLuint makeTechsSimpleBody()
1156 {
1157 int sph;
1158 GLuint O;
1159 float sp[4];
1160
1161 sph =3;
1162
1163 O = glGenLists(1);
1164 glNewList(O, GL_COMPILE);
1165
1166 glColor3fv(colorgrey1);
1167
1168 sp[0] = sp[2] = 0;
1169 sp[1] = PLANEY+ 0.2;
1170 sp[3] = 0.15;
1171 andysphdraw(sp, sph);
1172
1173 makercubeTopBack(0, PLANEY+0.6, 0, 0.07, 0.5, 0.07, colorgrey1);
1174 makercubeTopBack( 0, PLANEY+0.5, 0, 0.2, 0.05, 0.05, colorgrey3);
1175
1176 makercubenobtm( 0.2, PLANEY+0.5, 0, 0.03, 0.25, 0.2, colorgrey2);
1177 makercubenobtm(-0.2, PLANEY+0.5, 0, 0.03, 0.25, 0.2, colorgrey2);
1178
1179 glEndList();
1180 return(O);
1181 }
1182
1183 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1184
makeTechsHead()1185 GLuint makeTechsHead()
1186 {
1187 GLuint O;
1188
1189 O = glGenLists(1);
1190 glNewList(O, GL_COMPILE);
1191
1192 makercube(0, PLANEY+1.2, 0, 0.15, 0.15, 0.1, colorgrey3);
1193 makercube(0, PLANEY+1.2, 0.13, 0.06, 0.06, 0.04, colorblack);
1194 makercube(0, PLANEY+1.2, -0.15, 0.075, 0.11, 0.1, colorgrey2);
1195
1196 glEndList();
1197 return(O);
1198 }
1199
makeTechsSimpleHead()1200 GLuint makeTechsSimpleHead()
1201 {
1202 GLuint O;
1203
1204 O = glGenLists(1);
1205 glNewList(O, GL_COMPILE);
1206
1207 makercube(0, PLANEY+1.2, 0, 0.15, 0.15, 0.1, colorgrey3);
1208 makercubenobtm(0, PLANEY+1.2, 0.13, 0.06, 0.06, 0.04, colorblack);
1209 makercubeTopBack(0, PLANEY+1.2, -0.15, 0.075, 0.11, 0.1, colorgrey2);
1210
1211 glEndList();
1212 return(O);
1213 }
1214
1215 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1216
makeTechsShadow()1217 GLuint makeTechsShadow()
1218 {
1219 GLuint O;
1220 GLUquadricObj *qobj;
1221
1222 O = glGenLists(1);
1223 glNewList(O, GL_COMPILE);
1224
1225 glPushMatrix();
1226 glColor3fv(colorblack);
1227 glTranslatef(0, SHADOWS, 0);
1228 glRotatef(-90, 1, 0, 0);
1229
1230 qobj = gluNewQuadric();
1231 gluDisk( qobj, 0., 0.13, 32, 1);
1232 gluDeleteQuadric(qobj);
1233
1234 glPopMatrix();
1235
1236 glColor4fv(colorblack);
1237
1238 shadow (0, 0, 0.2, 0.05);
1239
1240 shadow (0.2, 0, 0.03, 0.2);
1241 shadow (-0.2, 0, 0.03, 0.2);
1242
1243 glEndList();
1244 return(O);
1245 }
1246
1247
1248
1249 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1250 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1251 /* draw intact power line tower */
1252 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1253
makePowerTower()1254 GLuint makePowerTower()
1255 {
1256 GLuint O;
1257 GLfloat lineWidthNow;
1258 glGetFloatv(GL_LINE_WIDTH, &lineWidthNow);
1259
1260 O = glGenLists(1);
1261 glNewList(O, GL_COMPILE);
1262
1263 drawTower(0, 0);
1264
1265 glEndList();
1266
1267 glLineWidth(lineWidthNow);
1268
1269 return(O);
1270 }
1271
1272 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1273
makeGenericWindows()1274 GLuint makeGenericWindows()
1275 {
1276 GLuint O;
1277
1278 O = glGenLists(1);
1279 glNewList(O, GL_COMPILE);
1280
1281 glColor3fv(colorblack);
1282
1283 wzminus(-0.15, 0.6, -0.303, 0.05, 0.1);
1284 wzminus( 0.0, 0.6, -0.303, 0.05, 0.1);
1285 wzminus( 0.15, 0.6, -0.303, 0.05, 0.1);
1286 wzminus(-0.15, 0.3, -0.303, 0.05, 0.1);
1287 wzminus( 0.0, 0.3, -0.303, 0.05, 0.1);
1288 wzminus( 0.15, 0.3, -0.303, 0.05, 0.1);
1289
1290 wzplus(-0.15, 0.6, 0.303, 0.05, 0.1);
1291 wzplus( 0.0, 0.6, 0.303, 0.05, 0.1);
1292 wzplus(-0.15, 0.3, 0.303, 0.05, 0.1);
1293 wzplus( 0.0, 0.3, 0.303, 0.05, 0.1);
1294
1295 wxplus( 0.303, 0.6, -0.15, 0.1, 0.05);
1296 wxplus( 0.303, 0.6, 0.0, 0.1, 0.05);
1297 wxplus( 0.303, 0.6, 0.15, 0.1, 0.05);
1298
1299 wxminus(-0.303, 0.6, -0.15, 0.1, 0.05);
1300 wxminus(-0.303, 0.6, 0.0, 0.1, 0.05);
1301 wxminus(-0.303, 0.6, 0.15, 0.1, 0.05);
1302
1303 glEndList();
1304 return(O);
1305 }
1306
1307 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1308 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1309 /* draw high-rise building */
1310 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1311
makebuilding1(int detail)1312 GLuint makebuilding1(int detail)
1313 {
1314 GLuint O;
1315
1316 O = glGenLists(1);
1317 glNewList(O, GL_COMPILE);
1318
1319 makercubenobtmnotop( 0, .7, 0, .3, .7, .3, colorwhite);
1320 makercubenobtm( 0, 1.5, 0, .3, .1, .3, colorgrey1);
1321
1322 if (detail > 0)
1323 {
1324 glColor3fv(colorblack);
1325 wzminus(-0.15, 1.2, -0.303, 0.05, 0.1);
1326 wzminus( 0.0, 1.2, -0.303, 0.05, 0.1);
1327 wzminus( 0.15, 1.2, -0.303, 0.05, 0.1);
1328 wzminus(-0.15, 0.9, -0.303, 0.05, 0.1);
1329 wzminus( 0.0, 0.9, -0.303, 0.05, 0.1);
1330 wzminus( 0.15, 0.9, -0.303, 0.05, 0.1);
1331 wzminus(-0.15, 0.6, -0.303, 0.05, 0.1);
1332 wzminus( 0.0, 0.6, -0.303, 0.05, 0.1);
1333 wzminus( 0.15, 0.6, -0.303, 0.05, 0.1);
1334 wzminus(-0.15, 0.3, -0.303, 0.05, 0.1);
1335 wzminus( 0.0, 0.3, -0.303, 0.05, 0.1);
1336 wzminus( 0.15, 0.3, -0.303, 0.05, 0.1);
1337
1338 wzplus(-0.15, 1.2, 0.303, 0.05, 0.1);
1339 wzplus( 0.0, 1.2, 0.303, 0.05, 0.1);
1340 wzplus( 0.15, 1.2, 0.303, 0.05, 0.1);
1341 wzplus(-.15, 0.9, 0.303, 0.05, 0.1);
1342 wzplus( 0.0, 0.9, 0.303, 0.05, 0.1);
1343 wzplus( 0.15, 0.9, 0.303, 0.05, 0.1);
1344 wzplus(-0.15, 0.6, 0.303, 0.05, 0.1);
1345 wzplus( 0.0, 0.6, 0.303, 0.05, 0.1);
1346 wzplus( 0.15, 0.6, 0.303, 0.05, 0.1);
1347 wzplus(-0.15, 0.3, 0.303, 0.05, 0.1);
1348 wzplus( 0.0, 0.3, 0.303, 0.05, 0.1);
1349 wzplus( 0.15, 0.3, 0.303, 0.05, 0.1);
1350
1351 wxplus(0.303, 0.6, -0.15, 0.1, 0.05);
1352 wxplus(0.303, 0.3, -0.15, 0.1, 0.05);
1353
1354 wxminus(-0.303, 0.6, -0.15, 0.1, 0.05);
1355 wxminus(-0.303, 0.6, 0.0, 0.1, 0.05);
1356 wxminus(-0.303, 0.3, -0.15, 0.1, 0.05);
1357 wxminus(-0.303, 0.3, 0.0, 0.1, 0.05);
1358 }
1359 glEndList();
1360 return(O);
1361 }
1362
1363 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1364 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1365 /* draw generic beige building */
1366 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1367
makebuilding2(int detail)1368 GLuint makebuilding2(int detail)
1369 {
1370 GLuint O;
1371
1372 O = glGenLists(1);
1373 glNewList(O, GL_COMPILE);
1374
1375 makercubenobtm( 0.0, 0.4, 0.0, 0.3, 0.4, 0.3, colorbeige);
1376
1377 if (detail > 0)
1378 {
1379 glColor3fv(colorblack);
1380
1381 wzminus(-0.15, 0.6, -0.303, 0.05, 0.15);
1382 wzminus( 0.0, 0.6, -0.303, 0.05, 0.15);
1383 wzminus( 0.15, 0.6, -0.303, 0.05, 0.15);
1384
1385 wzplus(-0.15, 0.6, 0.303, 0.05, 0.15);
1386 wzplus( 0.0, 0.6, 0.303, 0.05, 0.15);
1387 wzplus( 0.15, 0.6, 0.303, 0.05, 0.15);
1388
1389 wxplus( 0.303, 0.6, -0.15, 0.15, 0.05);
1390 wxplus( 0.303, 0.6, 0.0, 0.15, 0.05);
1391 wxplus( 0.303, 0.6, 0.15, 0.15, 0.05);
1392
1393 wxminus(-0.303, 0.6, -0.15, 0.15, 0.05);
1394 wxminus(-0.303, 0.6, 0.0, 0.15, 0.05);
1395 wxminus(-0.303, 0.6, 0.15, 0.15, 0.05);
1396 }
1397
1398 glEndList();
1399 return(O);
1400 }
1401
1402 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1403 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1404 /* draw generic suburban home */
1405 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1406
makebuilding5(int detail)1407 GLuint makebuilding5(int detail)
1408 {
1409 GLuint O;
1410
1411 O = glGenLists(1);
1412 glNewList(O, GL_COMPILE);
1413
1414 makercubenobtmnotop( 0, .2, 0, .3, .2, .35, colorwhite);
1415 makeitPyr(1, colorgrey2, 0, .5, 0, .35, .1, .45);
1416 makercubenobtm( .2, .4, 0, .03, .2, .05, colorwhite);
1417
1418 if (detail > 0)
1419 {
1420 glColor3fv(colorblack);
1421
1422 wxminus(-0.303, 0.15, -0.15, 0.15, 0.05);
1423 wxplus( 0.303, 0.25, 0.15, 0.05, 0.05);
1424 wzminus(-0.15, 0.25, -0.352, 0.05, 0.05);
1425 wzminus( 0.0, 0.25, -0.352, 0.05, 0.05);
1426 wzplus( 0.15, 0.25, 0.352, 0.05, 0.05);
1427 }
1428
1429 glEndList();
1430 return(O);
1431 }
1432
1433
1434 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1435 /* draw granite monument */
1436 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1437
makebuilding7()1438 GLuint makebuilding7()
1439 {
1440 GLuint O;
1441
1442 O = glGenLists(1);
1443 glNewList(O, GL_COMPILE);
1444
1445 makeitPyr(3, colorgrey2, 0.0, 0.4, 0.0, 0.3, 0.4, 0.3);
1446
1447 glEndList();
1448 return(O);
1449 }
1450
1451
1452 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1453 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1454 /* draw water tower */
1455 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1456
makebuilding9(int lowDetail)1457 GLuint makebuilding9(int lowDetail)
1458 {
1459 GLuint O;
1460 GLUquadricObj *qobj;
1461
1462 O = glGenLists(1);
1463 glNewList(O, GL_COMPILE);
1464
1465
1466 glPushMatrix();
1467 glTranslatef(-0.3, 1, -0.3);
1468 glScalef(.3, .2, .3);
1469
1470 if (lowDetail)
1471 drawClosedCylinder(colorgrey1, colorwhite, 1, -1);
1472 else
1473 drawClosedCylinder(colorgrey1, colorwhite, 1, 1);
1474
1475 glPopMatrix();
1476
1477 glPushMatrix();
1478 glTranslatef(-0.1, 0.5, -0.1);
1479 glScalef(0.1, 0.5, 0.1);
1480
1481 if (lowDetail)
1482 drawClosedCylinder(colorgrey3, colorwhite, 1, -1);
1483 else
1484 drawClosedCylinder(colorgrey3, colorwhite, 1, 1);
1485 glPopMatrix();
1486
1487 makercubenobtm(-0.22, 0.5, -0.22, 0.025, 0.5, 0.025, colorgrey2);
1488 makercubenobtm( 0.22, 0.5, -0.22, 0.025, 0.5, 0.025, colorgrey2);
1489 makercubenobtm(-0.22, 0.5, 0.22, 0.025, 0.5, 0.025, colorgrey2);
1490 makercubenobtm( 0.22, 0.5, 0.22, 0.025, 0.5, 0.025, colorgrey2);
1491
1492 makercube(-0.2, 0.4, 0.0, 0.015, 0.015, 0.2, colorgrey3);
1493 makercube( 0.2, 0.4, 0.0, 0.015, 0.015, 0.2, colorgrey3);
1494 makercube( 0.0, 0.4, 0.2, 0.2, 0.015, 0.015, colorgrey3);
1495 makercube( 0.0, 0.4, -0.2, 0.2, 0.015, 0.015, colorgrey3);
1496
1497 glPushMatrix();
1498 glColor3fv(colorblack);
1499 glRotatef(-90, 1, 0, 0);
1500
1501 qobj = gluNewQuadric();
1502 gluDisk( qobj, 0., 0.3, 32, 1);
1503 gluDeleteQuadric(qobj);
1504
1505 glPopMatrix();
1506
1507 glEndList();
1508 return(O);
1509 }
1510
1511
1512 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1513 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1514 /* draw construction */
1515 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1516
makebuilding10()1517 GLuint makebuilding10()
1518 {
1519 GLuint O;
1520
1521 /****************/
1522 /* construction */
1523 /****************/
1524
1525 float cons1[3] = {-0.29, 0.1, -0.29};
1526 float cons2[3] = {-0.29, 0.8, -0.29};
1527 float cons3[3] = { 0.29, 0.1, -0.29};
1528 float cons4[3] = { 0.29, 0.8, -0.29};
1529 float cons5[3] = { 0.29, 0.1, 0.29};
1530 float cons6[3] = { 0.29, 0.8, 0.29};
1531 float cons7[3] = {-0.29, 0.1, 0.29};
1532 float cons8[3] = {-0.29, 0.8, 0.29};
1533
1534 float cons9[3] = {-0.29, 0.45, -0.29};
1535 float cons10[3] ={-0.29, 0.45, 0.29};
1536 float cons11[3] ={ 0.29, 0.45, 0.29};
1537 float cons12[3] ={ 0.29, 0.45, -0.29};
1538
1539 float cons13[3] ={ 0.0, 0.45, -0.29};
1540 float cons14[3] ={ 0.0, 0.45, 0.29};
1541 float cons15[3] ={ 0.0, 0.8, 0.29};
1542 float cons16[3] ={ 0.0, 0.8, -0.29};
1543
1544 float cons17[3] ={-0.29, 0.45, 0.0};
1545 float cons18[3] ={ 0.29, 0.45, 0.0};
1546 float cons19[3] ={ 0.29, 0.8, 0.0};
1547 float cons20[3] ={-0.29, 0.8, 0.0};
1548
1549 O = glGenLists(1);
1550 glNewList(O, GL_COMPILE);
1551
1552 makercubenobtm( 0, .05, 0, .3, .05, .3, colorwhite);
1553
1554 glColor3fv(colorgrey1);
1555 glLineWidth(2.01);
1556
1557 glBegin(GL_LINES);
1558 glVertex3fv(cons1);
1559 glVertex3fv(cons2);
1560
1561 glVertex3fv(cons3);
1562 glVertex3fv(cons4);
1563
1564 glVertex3fv(cons5);
1565 glVertex3fv(cons6);
1566
1567 glVertex3fv(cons7);
1568 glVertex3fv(cons8);
1569 glEnd();
1570
1571
1572 glBegin(GL_LINE_LOOP);
1573 glVertex3fv(cons2);
1574 glVertex3fv(cons8);
1575 glVertex3fv(cons6);
1576 glVertex3fv(cons4);
1577 glEnd();
1578
1579 glBegin(GL_LINE_LOOP);
1580 glVertex3fv(cons9);
1581 glVertex3fv(cons10);
1582 glVertex3fv(cons11);
1583 glVertex3fv(cons12);
1584 glEnd();
1585
1586 glBegin(GL_LINE_LOOP);
1587 glVertex3fv(cons13);
1588 glVertex3fv(cons14);
1589 glVertex3fv(cons15);
1590 glVertex3fv(cons16);
1591 glEnd();
1592
1593 glBegin(GL_LINE_LOOP);
1594 glVertex3fv(cons17);
1595 glVertex3fv(cons18);
1596 glVertex3fv(cons19);
1597 glVertex3fv(cons20);
1598 glEnd();
1599
1600 glEndList();
1601
1602 return(O);
1603 }
1604
1605
1606 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1607 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1608 /* draw factory */
1609 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1610
makebuilding12(int detail)1611 GLuint makebuilding12(int detail)
1612 {
1613 GLuint O;
1614
1615 O = glGenLists(1);
1616 glNewList(O, GL_COMPILE);
1617
1618 makercubenobtm( 0, .4, 0, .3, .4, .3, colorbrown);
1619 makercubenobtmnotop( 0, .5, 0.02, .302, .1, .3, colorblack);
1620
1621 if (detail > 0)
1622 {
1623 glColor3fv(colorblack);
1624
1625 wxplus(0.303, .15, -.15, .15, .05);
1626 wxminus(-0.303, .15, -.15, .15, .05);
1627 }
1628
1629 glEndList();
1630 return(O);
1631 }
1632
1633 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1634 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1635 /* draw control tower */
1636 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1637
makebuilding14()1638 GLuint makebuilding14()
1639 {
1640 GLuint O;
1641
1642 O = glGenLists(1);
1643 glNewList(O, GL_COMPILE);
1644 makercubenobtmnotop( 0, .55, 0, .15, .55, .15, colorbeige);
1645 makercubenobtm( 0, 1.55, 0, .3, .05, .3, colorbeige);
1646
1647 makeitPyr(5, colorbrown, 0, 1.1, 0, .3, .4, .3);
1648 glEndList();
1649 return(O);
1650 }
1651
1652
1653 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1654 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1655 /* draw end of city hall */
1656 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1657
makebuilding19(int detail)1658 GLuint makebuilding19(int detail)
1659 {
1660 GLuint O;
1661
1662 O = glGenLists(1);
1663 glNewList(O, GL_COMPILE);
1664
1665 makercubenobtmnotop( 0, .3, 0, .3, .3, .3, colorbrown);
1666 makeitPyr(4, colorbeige, 0, .7, 0, .3, .1, .3);
1667
1668 if (detail > 0)
1669 {
1670 glColor3fv(colorblack);
1671
1672 wxplus(.303, .4, -.15, .08, .05);
1673 wxplus(.303, .2, -.15, .08, .05);
1674 wxplus(.303, .4, +.15, .08, .05);
1675 wxplus(.303, .2, +.15, .08, .05);
1676
1677 wxminus(-.303, .4, -.15, .08, .05);
1678 wxminus(-.303, .2, -.15, .08, .05);
1679 wxminus(-.303, .4, +.15, .08, .05);
1680 wxminus(-.303, .2, +.15, .08, .05);
1681 }
1682
1683 glEndList();
1684 return(O);
1685 }
1686
1687
1688 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1689 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1690 /* draw middle of city hall */
1691 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1692
makebuilding20(int detail)1693 GLuint makebuilding20(int detail)
1694 {
1695 GLuint O;
1696
1697 O = glGenLists(1);
1698 glNewList(O, GL_COMPILE);
1699
1700 makercubenobtmnotop( 0, .3, 0, .3, .3, .3, colorbrown);
1701 makeitPyr(4, colorbeige, 0, .7, 0, .3, .1, .3);
1702 makeitPyr(6, colorbeige, 0, .7, 0, .3, .1, .3);
1703
1704 if (detail > 0)
1705 {
1706 glColor3fv(colorblack);
1707
1708 wxplus(.303, .4, -.15, .08, .05);
1709 wxplus(.303, .2, -.15, .08, .05);
1710 wxplus(.303, .4, +.15, .08, .05);
1711 wxplus(.303, .2, +.15, .08, .05);
1712
1713 wxminus(-.303, .4, -.15, .08, .05);
1714 wxminus(-.303, .2, -.15, .08, .05);
1715 wxminus(-.303, .4, +.15, .08, .05);
1716 wxminus(-.303, .2, +.15, .08, .05);
1717 }
1718
1719 glEndList();
1720 return(O);
1721 }
1722
1723 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1724 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1725 /* draw front of city hall */
1726 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1727
makebuilding21(int detail)1728 GLuint makebuilding21(int detail)
1729 {
1730 GLuint O;
1731
1732 O = glGenLists(1);
1733 glNewList(O, GL_COMPILE);
1734
1735 makercubenobtmnotop( -.2, .3, 0, .1, .3, .3, colorbrown);
1736 makeitPyr(6, colorbeige, 0, .7, 0, .3, .1, .3);
1737 makercubenobtm( 0, .05, 0, .29, .05, .29, colorgrey1);
1738
1739 if (detail > 0)
1740 {
1741 glColor3fv(colorblack);
1742
1743 wxplus(-.098, .22, -.10, .12, .05);
1744 wxplus(-.098, .22, +.10, .12, .05);
1745
1746 wxminus(-.303, .4, -.15, .08, .05);
1747 wxminus(-.303, .2, -.15, .08, .05);
1748 wxminus(-.303, .4, +.15, .08, .05);
1749 wxminus(-.303, .2, +.15, .08, .05);
1750 }
1751
1752 makercubenobtmnotop( 0.25, .3, 0.25, .03, .3, .03, colorwhite);
1753 makercubenobtmnotop( 0.25, .3, -0.25, .03, .3, .03, colorwhite);
1754
1755 makercubenobtmnotop( 0.0, .3, 0.25, .03, .3, .03, colorwhite);
1756 makercubenobtmnotop( 0.0, .3, -0.25, .03, .3, .03, colorwhite);
1757
1758 glEndList();
1759 return(O);
1760 }
1761
1762
1763 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1764 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1765 /* draw maser emplacement */
1766 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1767
makebuilding31()1768 GLuint makebuilding31()
1769 {
1770 GLUquadricObj *qobj;
1771 GLuint O;
1772
1773 O = glGenLists(1);
1774 glNewList(O, GL_COMPILE);
1775
1776 makercubenobtm( 0, .095, 0, .36, .095, .36, colorgrey1);
1777
1778 makercubenobtm( .35, .1, .35, .03, .1, .03, colorblue);
1779 makercubenobtm( -.35, .1, .35, .03, .1, .03, colorblue);
1780 makercubenobtm( .35, .1, -.35, .03, .1, .03, colorblue);
1781 makercubenobtm( -.35, .1, -.35, .03, .1, .03, colorblue);
1782
1783 glColor3fv(colorwhite);
1784
1785 glPushMatrix();
1786 glTranslatef(0, .2, 0);
1787 glRotatef(-90, 1, 0, 0);
1788
1789 qobj = gluNewQuadric();
1790 gluDisk( qobj, 0., 0.3, 32, 1);
1791 gluDeleteQuadric(qobj);
1792 glPopMatrix();
1793
1794 glEndList();
1795 return(O);
1796 }
1797
1798 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1799 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1800 /* draw helicopter pad */
1801 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1802
makebuilding32()1803 GLuint makebuilding32()
1804 {
1805 GLUquadricObj *qobj;
1806 GLuint O;
1807
1808 O = glGenLists(1);
1809 glNewList(O, GL_COMPILE);
1810
1811
1812 makercubenobtm( 0, .095, 0, .36, .095, .36, colorgrey1);
1813
1814 glColor3fv(coloryellow);
1815
1816 glPushMatrix();
1817 glTranslatef(0, .2, 0);
1818 glRotatef(-90, 1, 0, 0);
1819
1820 qobj = gluNewQuadric();
1821 gluDisk( qobj, 0., 0.3, 32, 1);
1822 gluDeleteQuadric(qobj);
1823 glPopMatrix();
1824
1825 glColor3fv(colorgrey1);
1826
1827 glPushMatrix();
1828 glTranslatef(0, .21, 0);
1829 glRotatef(-90, 1, 0, 0);
1830
1831 qobj = gluNewQuadric();
1832 gluDisk( qobj, 0., 0.2, 32, 1);
1833 gluDeleteQuadric(qobj);
1834 glPopMatrix();
1835
1836 glEndList();
1837 return(O);
1838 }
1839
1840
1841
1842 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1843 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1844 /* create object for strip mall store */
1845 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1846
makeStrip1(int detail)1847 GLuint makeStrip1(int detail)
1848 {
1849 GLuint O;
1850
1851 O = glGenLists(1);
1852 glNewList(O, GL_COMPILE);
1853
1854 drawBuilding15(colorwhite, colorred, detail);
1855
1856 glEndList();
1857 return(O);
1858 }
1859
1860 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1861 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1862 /* create object for strip mall store */
1863 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1864
makeStrip2(int detail)1865 GLuint makeStrip2(int detail)
1866 {
1867 GLuint O;
1868
1869 O = glGenLists(1);
1870 glNewList(O, GL_COMPILE);
1871
1872 drawBuilding15(colorgrey2, coloryellow, detail);
1873
1874 glEndList();
1875 return(O);
1876 }
1877
1878 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1879 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1880 /* create object for strip mall store */
1881 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1882
makeStrip3(int detail)1883 GLuint makeStrip3(int detail)
1884 {
1885 GLuint O;
1886
1887 O = glGenLists(1);
1888 glNewList(O, GL_COMPILE);
1889
1890 drawBuilding15(colorbeige, colorblue, detail);
1891
1892 glEndList();
1893 return(O);
1894 }
1895
1896 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1897 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1898 /* make object for battalion title */
1899 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1900
makeTitles(int detail)1901 GLuint makeTitles(int detail)
1902 {
1903 GLuint O;
1904
1905 O = glGenLists(1);
1906 glNewList(O, GL_COMPILE);
1907
1908 /*****/
1909 /* b */
1910 /*****/
1911
1912 makerlogo(-3.5, 3.5, 0, .35, .1, .2, detail, 0, 1);
1913 makerlogo(-3.75, 3.75, 0, .1, .25, .2, detail, 0, 1);
1914 makerlogo(-3.25, 3.25, 0, .1, .25, .2, detail, 0, 1);
1915 makerlogo(-3.5, 3., 0, .35, .1, .2, detail, 0, 1);
1916
1917 /*****/
1918 /* a */
1919 /*****/
1920
1921 makerlogo(-2.5, 3.5, 0, .35, .1, .2, detail, 0, 1);
1922 makerlogo(-2.75, 3.25, 0, .1, .3, .2, detail, 0, 1);
1923 makerlogo(-2.25, 3.25, 0, .1, .3, .2, detail, 0, 1);
1924 makerlogo(-2.65, 3., 0, .20, .1, .2, detail, 0, 1);
1925
1926 /*****/
1927 /* t */
1928 /*****/
1929
1930 makerlogo(-1.5, 3.5, 0, .3, .1, .2, detail, 0, 1);
1931 makerlogo(-1.75, 3.5, 0, .1, .6, .2, detail, 0, 1);
1932
1933 /*****/
1934 /* t */
1935 /*****/
1936
1937 makerlogo(-0.5, 3.5, 0, .3, .1, .2, detail, 0, 1);
1938 makerlogo(-0.75, 3.5, 0, .1, .6, .2, detail, 0, 1);
1939
1940 /*****/
1941 /* a */
1942 /*****/
1943
1944 makerlogo(0.5, 3.5, 0, .35, .1, .2, detail, 1, 0);
1945 makerlogo(0.25, 3.25, 0, .1, .3, .2, detail, 1, 0);
1946 makerlogo(0.75, 3.25, 0, .1, .3, .2, detail, 1, 0);
1947 makerlogo(0.35, 3., 0, .20, .1, .2, detail, 1, 0);
1948
1949 /*****/
1950 /* l */
1951 /*****/
1952
1953 makerlogo(1.25, 3.5, 0, .1, .6, .2, detail, 1, 0);
1954
1955 /*****/
1956 /* i */
1957 /*****/
1958
1959 makerlogo(1.75, 3.25, 0, .1, .35, .2, detail, 1, 0);
1960
1961 /*****/
1962 /* o */
1963 /*****/
1964
1965 makerlogo(2.5, 3.5, 0, .35, .1, .2, detail, 1, 0);
1966 makerlogo(2.25, 3.25, 0, .1, .3, .2, detail, 1, 0);
1967 makerlogo(2.75, 3.25, 0, .1, .3, .2, detail, 1, 0);
1968 makerlogo(2.5, 3, 0, .35, .1, .2, detail, 1, 0);
1969
1970 /*****/
1971 /* n */
1972 /*****/
1973
1974 makerlogo(3.5, 3.5, 0, .35, .1, .2, detail, 1, 0);
1975 makerlogo(3.25, 3.25, 0, .1, .35, .2, detail, 1, 0);
1976 makerlogo(3.75, 3.25, 0, .1, .35, .2, detail, 1, 0);
1977
1978 glEndList();
1979 return(O);
1980 }
1981
1982
1983 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1984
makeBigPlane()1985 GLuint makeBigPlane()
1986 {
1987 GLuint O;
1988
1989 /*******************************/
1990 /* the battlefield in map view */
1991 /*******************************/
1992
1993 float Bplane[4][3] = {
1994 - 200, PLANEY, - 200,
1995 - 200, PLANEY, + 200,
1996 + 200, PLANEY, + 200,
1997 + 200, PLANEY, - 200};
1998
1999
2000 O = glGenLists(1);
2001 glNewList(O, GL_COMPILE);
2002
2003 glBegin(GL_QUADS);
2004 glVertex3fv(Bplane[0]);
2005 glVertex3fv(Bplane[1]);
2006 glVertex3fv(Bplane[2]);
2007 glVertex3fv(Bplane[3]);
2008 glEnd();
2009
2010 glEndList();
2011 return(O);
2012 }
2013
2014 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
2015
makeLowDPlane()2016 GLuint makeLowDPlane()
2017 {
2018 GLuint O;
2019
2020 /********************/
2021 /* the battlefield */
2022 /********************/
2023
2024 float Gplane[4][3] = {
2025 - PLANESIZE, PLANEY, - PLANESIZE,
2026 - PLANESIZE, PLANEY, + PLANESIZE,
2027 + PLANESIZE, PLANEY, + PLANESIZE,
2028 + PLANESIZE, PLANEY, - PLANESIZE};
2029
2030
2031 O = glGenLists(1);
2032 glNewList(O, GL_COMPILE);
2033
2034 glBegin(GL_QUADS);
2035 glVertex3fv(Gplane[0]);
2036 glVertex3fv(Gplane[1]);
2037 glVertex3fv(Gplane[2]);
2038 glVertex3fv(Gplane[3]);
2039 glEnd();
2040
2041 glEndList();
2042 return(O);
2043 }
2044
2045 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
2046
makeHighDPlane()2047 GLuint makeHighDPlane()
2048 {
2049 GLuint O;
2050 float ratio;
2051 register int i, j;
2052 float plane[4][3];
2053
2054 O = glGenLists(1);
2055 glNewList(O, GL_COMPILE);
2056
2057 ratio = PLANESIZE * 0.1;
2058 plane[0][1] = plane[1][1] = plane[2][1] = plane[3][1] = PLANEY;
2059
2060 for (i=0;i<=19;i++)
2061 for(j=0;j<=19;j++)
2062 {
2063 plane[0][0] = plane[1][0] = (i*ratio) - PLANESIZE;
2064 plane[2][0] = plane[3][0] = ((i+1)*ratio) - PLANESIZE;
2065
2066 plane[0][2] = plane[3][2] = (j*ratio) - PLANESIZE;
2067 plane[1][2] = plane[2][2] = ((j+1)*ratio) - PLANESIZE;
2068
2069 glBegin(GL_QUADS);
2070 glVertex3fv(plane[0]);
2071 glVertex3fv(plane[1]);
2072 glVertex3fv(plane[2]);
2073 glVertex3fv(plane[3]);
2074 glEnd();
2075 }
2076
2077 glEndList();
2078 return(O);
2079 }
2080
2081 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
2082
makePlaneDots(int detail)2083 GLuint makePlaneDots(int detail)
2084 {
2085 GLuint O;
2086 float grass1[3], grass2[3], grass3[3], grass4[3];
2087 register int j, i;
2088
2089 grass1[1] = grass2[1] = grass3[1] = grass4[1] = PLANEY;
2090
2091 O = glGenLists(1);
2092 glNewList(O, GL_COMPILE);
2093
2094 if (detail == 0)
2095 {
2096 glBegin(GL_POINTS);
2097 for(i=-PLANESIZE+1; i<=PLANESIZE; i+=1)
2098 {
2099 grass1[0] = i;
2100
2101 for(j=-PLANESIZE + 1; j <= PLANESIZE; j += 1)
2102 {
2103 grass1[2] = j;
2104
2105 glVertex3fv(grass1); /* a single point */
2106 }
2107 }
2108 }
2109 else
2110 {
2111 glBegin(GL_LINES);
2112 for(i=-PLANESIZE+1; i<=PLANESIZE; i+=1)
2113 {
2114 grass1[0] = grass3[0] = i - 0.015;
2115 grass2[0] = grass4[0] = i + 0.015;
2116
2117 for(j=-PLANESIZE + 1; j <= PLANESIZE; j += 1)
2118 {
2119 grass1[2] = grass4[2] = j - 0.015;
2120 grass2[2] = grass3[2] = j + 0.015;
2121
2122 glVertex3fv(grass1);
2123 glVertex3fv(grass2);
2124
2125 glVertex3fv(grass3);
2126 glVertex3fv(grass4);
2127 }
2128 }
2129 }
2130 glEnd();
2131
2132 glEndList();
2133 return(O);
2134 }
2135
2136
2137
2138 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
2139
makeRoundTreeShadow()2140 GLuint makeRoundTreeShadow()
2141 {
2142 GLuint O;
2143 GLUquadricObj *qobj;
2144
2145 O = glGenLists(1);
2146 glNewList(O, GL_COMPILE);
2147
2148 glRotatef(-90, 1, 0, 0);
2149
2150 qobj = gluNewQuadric();
2151 gluDisk( qobj, 0., 0.3, 32, 1);
2152 gluDeleteQuadric(qobj);
2153
2154 glEndList();
2155 return(O);
2156 }
2157
2158