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