1/**
2 * (c) Copyright 1993, 1994, Silicon Graphics, Inc.
3 * ALL RIGHTS RESERVED
4 * Permission to use, copy, modify, and distribute this software for
5 * any purpose and without fee is hereby granted, provided that the above
6 * copyright notice appear in all copies and that both the copyright notice
7 * and this permission notice appear in supporting documentation, and that
8 * the name of Silicon Graphics, Inc. not be used in advertising
9 * or publicity pertaining to distribution of the software without specific,
10 * written prior permission.
11 *
12 * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
13 * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
14 * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
15 * FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL SILICON
16 * GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
17 * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
18 * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
19 * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
20 * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC.  HAS BEEN
21 * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
22 * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
23 * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
24 *
25 * US Government Users Restricted Rights
26 * Use, duplication, or disclosure by the Government is subject to
27 * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
28 * (c)(1)(ii) of the Rights in Technical Data and Computer Software
29 * clause at DFARS 252.227-7013 and/or in similar or successor
30 * clauses in the FAR or the DOD or NASA FAR Supplement.
31 * Unpublished-- rights reserved under the copyright laws of the
32 * United States.  Contractor/manufacturer is Silicon Graphics,
33 * Inc., 2011 N.  Shoreline Blvd., Mountain View, CA 94039-7311.
34 *
35 * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
36 */
37#include <GLUT/glut.h>
38#include <math.h>
39#include "atlantis.h"
40/* *INDENT-OFF* */
41static float N002[3] = {0.000077 ,-0.020611 ,0.999788};
42static float N003[3] = {0.961425 ,0.258729 ,-0.093390};
43static float N004[3] = {0.510811 ,-0.769633 ,-0.383063};
44static float N005[3] = {0.400123 ,0.855734 ,-0.328055};
45static float N006[3] = {-0.770715 ,0.610204 ,-0.183440};
46static float N007[3] = {-0.915597 ,-0.373345 ,-0.149316};
47static float N008[3] = {-0.972788 ,0.208921 ,-0.100179};
48static float N009[3] = {-0.939713 ,-0.312268 ,-0.139383};
49static float N010[3] = {-0.624138 ,-0.741047 ,-0.247589};
50static float N011[3] = {0.591434 ,-0.768401 ,-0.244471};
51static float N012[3] = {0.935152 ,-0.328495 ,-0.132598};
52static float N013[3] = {0.997102 ,0.074243 ,-0.016593};
53static float N014[3] = {0.969995 ,0.241712 ,-0.026186};
54static float N015[3] = {0.844539 ,0.502628 ,-0.184714};
55static float N016[3] = {-0.906608 ,0.386308 ,-0.169787};
56static float N017[3] = {-0.970016 ,0.241698 ,-0.025516};
57static float N018[3] = {-0.998652 ,0.050493 ,-0.012045};
58static float N019[3] = {-0.942685 ,-0.333051 ,-0.020556};
59static float N020[3] = {-0.660944 ,-0.750276 ,0.015480};
60static float N021[3] = {0.503549 ,-0.862908 ,-0.042749};
61static float N022[3] = {0.953202 ,-0.302092 ,-0.012089};
62static float N023[3] = {0.998738 ,0.023574 ,0.044344};
63static float N024[3] = {0.979297 ,0.193272 ,0.060202};
64static float N025[3] = {0.798300 ,0.464885 ,0.382883};
65static float N026[3] = {-0.756590 ,0.452403 ,0.472126};
66static float N027[3] = {-0.953855 ,0.293003 ,0.065651};
67static float N028[3] = {-0.998033 ,0.040292 ,0.048028};
68static float N029[3] = {-0.977079 ,-0.204288 ,0.059858};
69static float N030[3] = {-0.729117 ,-0.675304 ,0.111140};
70static float N031[3] = {0.598361 ,-0.792753 ,0.116221};
71static float N032[3] = {0.965192 ,-0.252991 ,0.066332};
72static float N033[3] = {0.998201 ,-0.002790 ,0.059892};
73static float N034[3] = {0.978657 ,0.193135 ,0.070207};
74static float N035[3] = {0.718815 ,0.680392 ,0.142733};
75static float N036[3] = {-0.383096 ,0.906212 ,0.178936};
76static float N037[3] = {-0.952831 ,0.292590 ,0.080647};
77static float N038[3] = {-0.997680 ,0.032417 ,0.059861};
78static float N039[3] = {-0.982629 ,-0.169881 ,0.074700};
79static float N040[3] = {-0.695424 ,-0.703466 ,0.146700};
80static float N041[3] = {0.359323 ,-0.915531 ,0.180805};
81static float N042[3] = {0.943356 ,-0.319387 ,0.089842};
82static float N043[3] = {0.998272 ,-0.032435 ,0.048993};
83static float N044[3] = {0.978997 ,0.193205 ,0.065084};
84static float N045[3] = {0.872144 ,0.470094 ,-0.135565};
85static float N046[3] = {-0.664282 ,0.737945 ,-0.119027};
86static float N047[3] = {-0.954508 ,0.288570 ,0.075107};
87static float N048[3] = {-0.998273 ,0.032406 ,0.048993};
88static float N049[3] = {-0.979908 ,-0.193579 ,0.048038};
89static float N050[3] = {-0.858736 ,-0.507202 ,-0.072938};
90static float N051[3] = {0.643545 ,-0.763887 ,-0.048237};
91static float N052[3] = {0.955580 ,-0.288954 ,0.058068};
92static float N058[3] = {0.000050 ,0.793007 ,-0.609213};
93static float N059[3] = {0.913510 ,0.235418 ,-0.331779};
94static float N060[3] = {-0.807970 ,0.495000 ,-0.319625};
95static float N061[3] = {0.000000 ,0.784687 ,-0.619892};
96static float N062[3] = {0.000000 ,-1.000000 ,0.000000};
97static float N063[3] = {0.000000 ,1.000000 ,0.000000};
98static float N064[3] = {0.000000 ,1.000000 ,0.000000};
99static float N065[3] = {0.000000 ,1.000000 ,0.000000};
100static float N066[3] = {-0.055784 ,0.257059 ,0.964784};
101static float N069[3] = {-0.000505 ,-0.929775 ,-0.368127};
102static float N070[3] = {0.000000 ,1.000000 ,0.000000};
103static float P002[3] = {0.00, -36.59, 5687.72};
104static float P003[3] = {90.00, 114.73, 724.38};
105static float P004[3] = {58.24, -146.84, 262.35};
106static float P005[3] = {27.81, 231.52, 510.43};
107static float P006[3] = {-27.81, 230.43, 509.76};
108static float P007[3] = {-46.09, -146.83, 265.84};
109static float P008[3] = {-90.00, 103.84, 718.53};
110static float P009[3] = {-131.10, -165.92, 834.85};
111static float P010[3] = {-27.81, -285.31, 500.00};
112static float P011[3] = {27.81, -285.32, 500.00};
113static float P012[3] = {147.96, -170.89, 845.50};
114static float P013[3] = {180.00, 0.00, 2000.00};
115static float P014[3] = {145.62, 352.67, 2000.00};
116static float P015[3] = {55.62, 570.63, 2000.00};
117static float P016[3] = {-55.62, 570.64, 2000.00};
118static float P017[3] = {-145.62, 352.68, 2000.00};
119static float P018[3] = {-180.00, 0.01, 2000.00};
120static float P019[3] = {-178.20, -352.66, 2001.61};
121static float P020[3] = {-55.63, -570.63, 2000.00};
122static float P021[3] = {55.62, -570.64, 2000.00};
123static float P022[3] = {179.91, -352.69, 1998.39};
124static float P023[3] = {150.00, 0.00, 3000.00};
125static float P024[3] = {121.35, 293.89, 3000.00};
126static float P025[3] = {46.35, 502.93, 2883.09};
127static float P026[3] = {-46.35, 497.45, 2877.24};
128static float P027[3] = {-121.35, 293.90, 3000.00};
129static float P028[3] = {-150.00, 0.00, 3000.00};
130static float P029[3] = {-152.21, -304.84, 2858.68};
131static float P030[3] = {-46.36, -475.52, 3000.00};
132static float P031[3] = {46.35, -475.53, 3000.00};
133static float P032[3] = {155.64, -304.87, 2863.50};
134static float P033[3] = {90.00, 0.00, 4000.00};
135static float P034[3] = {72.81, 176.33, 4000.00};
136static float P035[3] = {27.81, 285.32, 4000.00};
137static float P036[3] = {-27.81, 285.32, 4000.00};
138static float P037[3] = {-72.81, 176.34, 4000.00};
139static float P038[3] = {-90.00, 0.00, 4000.00};
140static float P039[3] = {-72.81, -176.33, 4000.00};
141static float P040[3] = {-27.81, -285.31, 4000.00};
142static float P041[3] = {27.81, -285.32, 4000.00};
143static float P042[3] = {72.81, -176.34, 4000.00};
144static float P043[3] = {30.00, 0.00, 5000.00};
145static float P044[3] = {24.27, 58.78, 5000.00};
146static float P045[3] = {9.27, 95.11, 5000.00};
147static float P046[3] = {-9.27, 95.11, 5000.00};
148static float P047[3] = {-24.27, 58.78, 5000.00};
149static float P048[3] = {-30.00, 0.00, 5000.00};
150static float P049[3] = {-24.27, -58.78, 5000.00};
151static float P050[3] = {-9.27, -95.10, 5000.00};
152static float P051[3] = {9.27, -95.11, 5000.00};
153static float P052[3] = {24.27, -58.78, 5000.00};
154static float P058[3] = {0.00, 1212.72, 2703.08};
155static float P059[3] = {50.36, 0.00, 108.14};
156static float P060[3] = {-22.18, 0.00, 108.14};
157static float P061[3] = {0.00, 1181.61, 6344.65};
158static float P062[3] = {516.45, -887.08, 2535.45};
159static float P063[3] = {-545.69, -879.31, 2555.63};
160static float P064[3] = {618.89, -1005.64, 2988.32};
161static float P065[3] = {-635.37, -1014.79, 2938.68};
162static float P066[3] = {0.00, 1374.43, 3064.18};
163static float P069[3] = {0.00, -418.25, 5765.04};
164static float P070[3] = {0.00, 1266.91, 6629.60};
165static float P071[3] = {-139.12, -124.96, 997.98};
166static float P072[3] = {-139.24, -110.18, 1020.68};
167static float P073[3] = {-137.33, -94.52, 1022.63};
168static float P074[3] = {-137.03, -79.91, 996.89};
169static float P075[3] = {-135.21, -91.48, 969.14};
170static float P076[3] = {-135.39, -110.87, 968.76};
171static float P077[3] = {150.23, -78.44, 995.53};
172static float P078[3] = {152.79, -92.76, 1018.46};
173static float P079[3] = {154.19, -110.20, 1020.55};
174static float P080[3] = {151.33, -124.15, 993.77};
175static float P081[3] = {150.49, -111.19, 969.86};
176static float P082[3] = {150.79, -92.41, 969.70};
177static float iP002[3] = {0.00, -36.59, 5687.72};
178static float iP004[3] = {58.24, -146.84, 262.35};
179static float iP007[3] = {-46.09, -146.83, 265.84};
180static float iP010[3] = {-27.81, -285.31, 500.00};
181static float iP011[3] = {27.81, -285.32, 500.00};
182static float iP023[3] = {150.00, 0.00, 3000.00};
183static float iP024[3] = {121.35, 293.89, 3000.00};
184static float iP025[3] = {46.35, 502.93, 2883.09};
185static float iP026[3] = {-46.35, 497.45, 2877.24};
186static float iP027[3] = {-121.35, 293.90, 3000.00};
187static float iP028[3] = {-150.00, 0.00, 3000.00};
188static float iP029[3] = {-121.35, -304.84, 2853.86};
189static float iP030[3] = {-46.36, -475.52, 3000.00};
190static float iP031[3] = {46.35, -475.53, 3000.00};
191static float iP032[3] = {121.35, -304.87, 2853.86};
192static float iP033[3] = {90.00, 0.00, 4000.00};
193static float iP034[3] = {72.81, 176.33, 4000.00};
194static float iP035[3] = {27.81, 285.32, 4000.00};
195static float iP036[3] = {-27.81, 285.32, 4000.00};
196static float iP037[3] = {-72.81, 176.34, 4000.00};
197static float iP038[3] = {-90.00, 0.00, 4000.00};
198static float iP039[3] = {-72.81, -176.33, 4000.00};
199static float iP040[3] = {-27.81, -285.31, 4000.00};
200static float iP041[3] = {27.81, -285.32, 4000.00};
201static float iP042[3] = {72.81, -176.34, 4000.00};
202static float iP043[3] = {30.00, 0.00, 5000.00};
203static float iP044[3] = {24.27, 58.78, 5000.00};
204static float iP045[3] = {9.27, 95.11, 5000.00};
205static float iP046[3] = {-9.27, 95.11, 5000.00};
206static float iP047[3] = {-24.27, 58.78, 5000.00};
207static float iP048[3] = {-30.00, 0.00, 5000.00};
208static float iP049[3] = {-24.27, -58.78, 5000.00};
209static float iP050[3] = {-9.27, -95.10, 5000.00};
210static float iP051[3] = {9.27, -95.11, 5000.00};
211static float iP052[3] = {24.27, -58.78, 5000.00};
212static float iP061[3] = {0.00, 1181.61, 6344.65};
213static float iP069[3] = {0.00, -418.25, 5765.04};
214static float iP070[3] = {0.00, 1266.91, 6629.60};
215/* *INDENT-ON* */
216
217void
218Fish001(void)
219{
220    glBegin(GL_POLYGON);
221    glNormal3fv(N005);
222    glVertex3fv(P005);
223    glNormal3fv(N059);
224    glVertex3fv(P059);
225    glNormal3fv(N060);
226    glVertex3fv(P060);
227    glNormal3fv(N006);
228    glVertex3fv(P006);
229    glEnd();
230    glBegin(GL_POLYGON);
231    glNormal3fv(N015);
232    glVertex3fv(P015);
233    glNormal3fv(N005);
234    glVertex3fv(P005);
235    glNormal3fv(N006);
236    glVertex3fv(P006);
237    glNormal3fv(N016);
238    glVertex3fv(P016);
239    glEnd();
240    glBegin(GL_POLYGON);
241    glNormal3fv(N006);
242    glVertex3fv(P006);
243    glNormal3fv(N060);
244    glVertex3fv(P060);
245    glNormal3fv(N008);
246    glVertex3fv(P008);
247    glEnd();
248    glBegin(GL_POLYGON);
249    glNormal3fv(N016);
250    glVertex3fv(P016);
251    glNormal3fv(N006);
252    glVertex3fv(P006);
253    glNormal3fv(N008);
254    glVertex3fv(P008);
255    glEnd();
256    glBegin(GL_POLYGON);
257    glNormal3fv(N016);
258    glVertex3fv(P016);
259    glNormal3fv(N008);
260    glVertex3fv(P008);
261    glNormal3fv(N017);
262    glVertex3fv(P017);
263    glEnd();
264    glBegin(GL_POLYGON);
265    glNormal3fv(N017);
266    glVertex3fv(P017);
267    glNormal3fv(N008);
268    glVertex3fv(P008);
269    glNormal3fv(N018);
270    glVertex3fv(P018);
271    glEnd();
272    glBegin(GL_POLYGON);
273    glNormal3fv(N008);
274    glVertex3fv(P008);
275    glNormal3fv(N009);
276    glVertex3fv(P009);
277    glNormal3fv(N018);
278    glVertex3fv(P018);
279    glEnd();
280    glBegin(GL_POLYGON);
281    glNormal3fv(N008);
282    glVertex3fv(P008);
283    glNormal3fv(N060);
284    glVertex3fv(P060);
285    glNormal3fv(N009);
286    glVertex3fv(P009);
287    glEnd();
288    glBegin(GL_POLYGON);
289    glNormal3fv(N007);
290    glVertex3fv(P007);
291    glNormal3fv(N010);
292    glVertex3fv(P010);
293    glNormal3fv(N009);
294    glVertex3fv(P009);
295    glEnd();
296    glBegin(GL_POLYGON);
297    glNormal3fv(N009);
298    glVertex3fv(P009);
299    glNormal3fv(N019);
300    glVertex3fv(P019);
301    glNormal3fv(N018);
302    glVertex3fv(P018);
303    glEnd();
304    glBegin(GL_POLYGON);
305    glNormal3fv(N009);
306    glVertex3fv(P009);
307    glNormal3fv(N010);
308    glVertex3fv(P010);
309    glNormal3fv(N019);
310    glVertex3fv(P019);
311    glEnd();
312    glBegin(GL_POLYGON);
313    glNormal3fv(N010);
314    glVertex3fv(P010);
315    glNormal3fv(N020);
316    glVertex3fv(P020);
317    glNormal3fv(N019);
318    glVertex3fv(P019);
319    glEnd();
320    glBegin(GL_POLYGON);
321    glNormal3fv(N010);
322    glVertex3fv(P010);
323    glNormal3fv(N011);
324    glVertex3fv(P011);
325    glNormal3fv(N021);
326    glVertex3fv(P021);
327    glNormal3fv(N020);
328    glVertex3fv(P020);
329    glEnd();
330    glBegin(GL_POLYGON);
331    glNormal3fv(N004);
332    glVertex3fv(P004);
333    glNormal3fv(N011);
334    glVertex3fv(P011);
335    glNormal3fv(N010);
336    glVertex3fv(P010);
337    glNormal3fv(N007);
338    glVertex3fv(P007);
339    glEnd();
340    glBegin(GL_POLYGON);
341    glNormal3fv(N004);
342    glVertex3fv(P004);
343    glNormal3fv(N012);
344    glVertex3fv(P012);
345    glNormal3fv(N011);
346    glVertex3fv(P011);
347    glEnd();
348    glBegin(GL_POLYGON);
349    glNormal3fv(N012);
350    glVertex3fv(P012);
351    glNormal3fv(N022);
352    glVertex3fv(P022);
353    glNormal3fv(N011);
354    glVertex3fv(P011);
355    glEnd();
356    glBegin(GL_POLYGON);
357    glNormal3fv(N011);
358    glVertex3fv(P011);
359    glNormal3fv(N022);
360    glVertex3fv(P022);
361    glNormal3fv(N021);
362    glVertex3fv(P021);
363    glEnd();
364    glBegin(GL_POLYGON);
365    glNormal3fv(N059);
366    glVertex3fv(P059);
367    glNormal3fv(N005);
368    glVertex3fv(P005);
369    glNormal3fv(N015);
370    glVertex3fv(P015);
371    glEnd();
372    glBegin(GL_POLYGON);
373    glNormal3fv(N015);
374    glVertex3fv(P015);
375    glNormal3fv(N014);
376    glVertex3fv(P014);
377    glNormal3fv(N003);
378    glVertex3fv(P003);
379    glEnd();
380    glBegin(GL_POLYGON);
381    glNormal3fv(N015);
382    glVertex3fv(P015);
383    glNormal3fv(N003);
384    glVertex3fv(P003);
385    glNormal3fv(N059);
386    glVertex3fv(P059);
387    glEnd();
388    glBegin(GL_POLYGON);
389    glNormal3fv(N014);
390    glVertex3fv(P014);
391    glNormal3fv(N013);
392    glVertex3fv(P013);
393    glNormal3fv(N003);
394    glVertex3fv(P003);
395    glEnd();
396    glBegin(GL_POLYGON);
397    glNormal3fv(N003);
398    glVertex3fv(P003);
399    glNormal3fv(N012);
400    glVertex3fv(P012);
401    glNormal3fv(N059);
402    glVertex3fv(P059);
403    glEnd();
404    glBegin(GL_POLYGON);
405    glNormal3fv(N013);
406    glVertex3fv(P013);
407    glNormal3fv(N012);
408    glVertex3fv(P012);
409    glNormal3fv(N003);
410    glVertex3fv(P003);
411    glEnd();
412    glBegin(GL_POLYGON);
413    glNormal3fv(N013);
414    glVertex3fv(P013);
415    glNormal3fv(N022);
416    glVertex3fv(P022);
417    glNormal3fv(N012);
418    glVertex3fv(P012);
419    glEnd();
420    glBegin(GL_POLYGON);
421    glVertex3fv(P071);
422    glVertex3fv(P072);
423    glVertex3fv(P073);
424    glVertex3fv(P074);
425    glVertex3fv(P075);
426    glVertex3fv(P076);
427    glEnd();
428    glBegin(GL_POLYGON);
429    glVertex3fv(P077);
430    glVertex3fv(P078);
431    glVertex3fv(P079);
432    glVertex3fv(P080);
433    glVertex3fv(P081);
434    glVertex3fv(P082);
435    glEnd();
436}
437
438void
439Fish002(void)
440{
441    glBegin(GL_POLYGON);
442    glNormal3fv(N013);
443    glVertex3fv(P013);
444    glNormal3fv(N014);
445    glVertex3fv(P014);
446    glNormal3fv(N024);
447    glVertex3fv(P024);
448    glNormal3fv(N023);
449    glVertex3fv(P023);
450    glEnd();
451    glBegin(GL_POLYGON);
452    glNormal3fv(N014);
453    glVertex3fv(P014);
454    glNormal3fv(N015);
455    glVertex3fv(P015);
456    glNormal3fv(N025);
457    glVertex3fv(P025);
458    glNormal3fv(N024);
459    glVertex3fv(P024);
460    glEnd();
461    glBegin(GL_POLYGON);
462    glNormal3fv(N016);
463    glVertex3fv(P016);
464    glNormal3fv(N017);
465    glVertex3fv(P017);
466    glNormal3fv(N027);
467    glVertex3fv(P027);
468    glNormal3fv(N026);
469    glVertex3fv(P026);
470    glEnd();
471    glBegin(GL_POLYGON);
472    glNormal3fv(N017);
473    glVertex3fv(P017);
474    glNormal3fv(N018);
475    glVertex3fv(P018);
476    glNormal3fv(N028);
477    glVertex3fv(P028);
478    glNormal3fv(N027);
479    glVertex3fv(P027);
480    glEnd();
481    glBegin(GL_POLYGON);
482    glNormal3fv(N020);
483    glVertex3fv(P020);
484    glNormal3fv(N021);
485    glVertex3fv(P021);
486    glNormal3fv(N031);
487    glVertex3fv(P031);
488    glNormal3fv(N030);
489    glVertex3fv(P030);
490    glEnd();
491    glBegin(GL_POLYGON);
492    glNormal3fv(N013);
493    glVertex3fv(P013);
494    glNormal3fv(N023);
495    glVertex3fv(P023);
496    glNormal3fv(N022);
497    glVertex3fv(P022);
498    glEnd();
499    glBegin(GL_POLYGON);
500    glNormal3fv(N022);
501    glVertex3fv(P022);
502    glNormal3fv(N023);
503    glVertex3fv(P023);
504    glNormal3fv(N032);
505    glVertex3fv(P032);
506    glEnd();
507    glBegin(GL_POLYGON);
508    glNormal3fv(N022);
509    glVertex3fv(P022);
510    glNormal3fv(N032);
511    glVertex3fv(P032);
512    glNormal3fv(N031);
513    glVertex3fv(P031);
514    glEnd();
515    glBegin(GL_POLYGON);
516    glNormal3fv(N022);
517    glVertex3fv(P022);
518    glNormal3fv(N031);
519    glVertex3fv(P031);
520    glNormal3fv(N021);
521    glVertex3fv(P021);
522    glEnd();
523    glBegin(GL_POLYGON);
524    glNormal3fv(N018);
525    glVertex3fv(P018);
526    glNormal3fv(N019);
527    glVertex3fv(P019);
528    glNormal3fv(N029);
529    glVertex3fv(P029);
530    glEnd();
531    glBegin(GL_POLYGON);
532    glNormal3fv(N018);
533    glVertex3fv(P018);
534    glNormal3fv(N029);
535    glVertex3fv(P029);
536    glNormal3fv(N028);
537    glVertex3fv(P028);
538    glEnd();
539    glBegin(GL_POLYGON);
540    glNormal3fv(N019);
541    glVertex3fv(P019);
542    glNormal3fv(N020);
543    glVertex3fv(P020);
544    glNormal3fv(N030);
545    glVertex3fv(P030);
546    glEnd();
547    glBegin(GL_POLYGON);
548    glNormal3fv(N019);
549    glVertex3fv(P019);
550    glNormal3fv(N030);
551    glVertex3fv(P030);
552    glNormal3fv(N029);
553    glVertex3fv(P029);
554    glEnd();
555}
556
557void
558Fish003(void)
559{
560    glBegin(GL_POLYGON);
561    glNormal3fv(N032);
562    glVertex3fv(P032);
563    glNormal3fv(N023);
564    glVertex3fv(P023);
565    glNormal3fv(N033);
566    glVertex3fv(P033);
567    glNormal3fv(N042);
568    glVertex3fv(P042);
569    glEnd();
570    glBegin(GL_POLYGON);
571    glNormal3fv(N031);
572    glVertex3fv(P031);
573    glNormal3fv(N032);
574    glVertex3fv(P032);
575    glNormal3fv(N042);
576    glVertex3fv(P042);
577    glNormal3fv(N041);
578    glVertex3fv(P041);
579    glEnd();
580    glBegin(GL_POLYGON);
581    glNormal3fv(N023);
582    glVertex3fv(P023);
583    glNormal3fv(N024);
584    glVertex3fv(P024);
585    glNormal3fv(N034);
586    glVertex3fv(P034);
587    glNormal3fv(N033);
588    glVertex3fv(P033);
589    glEnd();
590    glBegin(GL_POLYGON);
591    glNormal3fv(N024);
592    glVertex3fv(P024);
593    glNormal3fv(N025);
594    glVertex3fv(P025);
595    glNormal3fv(N035);
596    glVertex3fv(P035);
597    glNormal3fv(N034);
598    glVertex3fv(P034);
599    glEnd();
600    glBegin(GL_POLYGON);
601    glNormal3fv(N030);
602    glVertex3fv(P030);
603    glNormal3fv(N031);
604    glVertex3fv(P031);
605    glNormal3fv(N041);
606    glVertex3fv(P041);
607    glNormal3fv(N040);
608    glVertex3fv(P040);
609    glEnd();
610    glBegin(GL_POLYGON);
611    glNormal3fv(N025);
612    glVertex3fv(P025);
613    glNormal3fv(N026);
614    glVertex3fv(P026);
615    glNormal3fv(N036);
616    glVertex3fv(P036);
617    glNormal3fv(N035);
618    glVertex3fv(P035);
619    glEnd();
620    glBegin(GL_POLYGON);
621    glNormal3fv(N026);
622    glVertex3fv(P026);
623    glNormal3fv(N027);
624    glVertex3fv(P027);
625    glNormal3fv(N037);
626    glVertex3fv(P037);
627    glNormal3fv(N036);
628    glVertex3fv(P036);
629    glEnd();
630    glBegin(GL_POLYGON);
631    glNormal3fv(N027);
632    glVertex3fv(P027);
633    glNormal3fv(N028);
634    glVertex3fv(P028);
635    glNormal3fv(N038);
636    glVertex3fv(P038);
637    glNormal3fv(N037);
638    glVertex3fv(P037);
639    glEnd();
640    glBegin(GL_POLYGON);
641    glNormal3fv(N028);
642    glVertex3fv(P028);
643    glNormal3fv(N029);
644    glVertex3fv(P029);
645    glNormal3fv(N039);
646    glVertex3fv(P039);
647    glNormal3fv(N038);
648    glVertex3fv(P038);
649    glEnd();
650    glBegin(GL_POLYGON);
651    glNormal3fv(N029);
652    glVertex3fv(P029);
653    glNormal3fv(N030);
654    glVertex3fv(P030);
655    glNormal3fv(N040);
656    glVertex3fv(P040);
657    glNormal3fv(N039);
658    glVertex3fv(P039);
659    glEnd();
660}
661
662void
663Fish004(void)
664{
665    glBegin(GL_POLYGON);
666    glNormal3fv(N040);
667    glVertex3fv(P040);
668    glNormal3fv(N041);
669    glVertex3fv(P041);
670    glNormal3fv(N051);
671    glVertex3fv(P051);
672    glNormal3fv(N050);
673    glVertex3fv(P050);
674    glEnd();
675    glBegin(GL_POLYGON);
676    glNormal3fv(N041);
677    glVertex3fv(P041);
678    glNormal3fv(N042);
679    glVertex3fv(P042);
680    glNormal3fv(N052);
681    glVertex3fv(P052);
682    glNormal3fv(N051);
683    glVertex3fv(P051);
684    glEnd();
685    glBegin(GL_POLYGON);
686    glNormal3fv(N042);
687    glVertex3fv(P042);
688    glNormal3fv(N033);
689    glVertex3fv(P033);
690    glNormal3fv(N043);
691    glVertex3fv(P043);
692    glNormal3fv(N052);
693    glVertex3fv(P052);
694    glEnd();
695    glBegin(GL_POLYGON);
696    glNormal3fv(N033);
697    glVertex3fv(P033);
698    glNormal3fv(N034);
699    glVertex3fv(P034);
700    glNormal3fv(N044);
701    glVertex3fv(P044);
702    glNormal3fv(N043);
703    glVertex3fv(P043);
704    glEnd();
705    glBegin(GL_POLYGON);
706    glNormal3fv(N034);
707    glVertex3fv(P034);
708    glNormal3fv(N035);
709    glVertex3fv(P035);
710    glNormal3fv(N045);
711    glVertex3fv(P045);
712    glNormal3fv(N044);
713    glVertex3fv(P044);
714    glEnd();
715    glBegin(GL_POLYGON);
716    glNormal3fv(N035);
717    glVertex3fv(P035);
718    glNormal3fv(N036);
719    glVertex3fv(P036);
720    glNormal3fv(N046);
721    glVertex3fv(P046);
722    glNormal3fv(N045);
723    glVertex3fv(P045);
724    glEnd();
725    glBegin(GL_POLYGON);
726    glNormal3fv(N036);
727    glVertex3fv(P036);
728    glNormal3fv(N037);
729    glVertex3fv(P037);
730    glNormal3fv(N047);
731    glVertex3fv(P047);
732    glNormal3fv(N046);
733    glVertex3fv(P046);
734    glEnd();
735    glBegin(GL_POLYGON);
736    glNormal3fv(N037);
737    glVertex3fv(P037);
738    glNormal3fv(N038);
739    glVertex3fv(P038);
740    glNormal3fv(N048);
741    glVertex3fv(P048);
742    glNormal3fv(N047);
743    glVertex3fv(P047);
744    glEnd();
745    glBegin(GL_POLYGON);
746    glNormal3fv(N038);
747    glVertex3fv(P038);
748    glNormal3fv(N039);
749    glVertex3fv(P039);
750    glNormal3fv(N049);
751    glVertex3fv(P049);
752    glNormal3fv(N048);
753    glVertex3fv(P048);
754    glEnd();
755    glBegin(GL_POLYGON);
756    glNormal3fv(N039);
757    glVertex3fv(P039);
758    glNormal3fv(N040);
759    glVertex3fv(P040);
760    glNormal3fv(N050);
761    glVertex3fv(P050);
762    glNormal3fv(N049);
763    glVertex3fv(P049);
764    glEnd();
765    glBegin(GL_POLYGON);
766    glNormal3fv(N070);
767    glVertex3fv(P070);
768    glNormal3fv(N061);
769    glVertex3fv(P061);
770    glNormal3fv(N002);
771    glVertex3fv(P002);
772    glEnd();
773    glBegin(GL_POLYGON);
774    glNormal3fv(N061);
775    glVertex3fv(P061);
776    glNormal3fv(N046);
777    glVertex3fv(P046);
778    glNormal3fv(N002);
779    glVertex3fv(P002);
780    glEnd();
781    glBegin(GL_POLYGON);
782    glNormal3fv(N045);
783    glVertex3fv(P045);
784    glNormal3fv(N046);
785    glVertex3fv(P046);
786    glNormal3fv(N061);
787    glVertex3fv(P061);
788    glEnd();
789    glBegin(GL_POLYGON);
790    glNormal3fv(N002);
791    glVertex3fv(P002);
792    glNormal3fv(N061);
793    glVertex3fv(P061);
794    glNormal3fv(N070);
795    glVertex3fv(P070);
796    glEnd();
797    glBegin(GL_POLYGON);
798    glNormal3fv(N002);
799    glVertex3fv(P002);
800    glNormal3fv(N045);
801    glVertex3fv(P045);
802    glNormal3fv(N061);
803    glVertex3fv(P061);
804    glEnd();
805}
806
807void
808Fish005(void)
809{
810    glBegin(GL_POLYGON);
811    glNormal3fv(N002);
812    glVertex3fv(P002);
813    glNormal3fv(N044);
814    glVertex3fv(P044);
815    glNormal3fv(N045);
816    glVertex3fv(P045);
817    glEnd();
818    glBegin(GL_POLYGON);
819    glNormal3fv(N002);
820    glVertex3fv(P002);
821    glNormal3fv(N043);
822    glVertex3fv(P043);
823    glNormal3fv(N044);
824    glVertex3fv(P044);
825    glEnd();
826    glBegin(GL_POLYGON);
827    glNormal3fv(N002);
828    glVertex3fv(P002);
829    glNormal3fv(N052);
830    glVertex3fv(P052);
831    glNormal3fv(N043);
832    glVertex3fv(P043);
833    glEnd();
834    glBegin(GL_POLYGON);
835    glNormal3fv(N002);
836    glVertex3fv(P002);
837    glNormal3fv(N051);
838    glVertex3fv(P051);
839    glNormal3fv(N052);
840    glVertex3fv(P052);
841    glEnd();
842    glBegin(GL_POLYGON);
843    glNormal3fv(N002);
844    glVertex3fv(P002);
845    glNormal3fv(N046);
846    glVertex3fv(P046);
847    glNormal3fv(N047);
848    glVertex3fv(P047);
849    glEnd();
850    glBegin(GL_POLYGON);
851    glNormal3fv(N002);
852    glVertex3fv(P002);
853    glNormal3fv(N047);
854    glVertex3fv(P047);
855    glNormal3fv(N048);
856    glVertex3fv(P048);
857    glEnd();
858    glBegin(GL_POLYGON);
859    glNormal3fv(N002);
860    glVertex3fv(P002);
861    glNormal3fv(N048);
862    glVertex3fv(P048);
863    glNormal3fv(N049);
864    glVertex3fv(P049);
865    glEnd();
866    glBegin(GL_POLYGON);
867    glNormal3fv(N002);
868    glVertex3fv(P002);
869    glNormal3fv(N049);
870    glVertex3fv(P049);
871    glNormal3fv(N050);
872    glVertex3fv(P050);
873    glEnd();
874    glBegin(GL_POLYGON);
875    glNormal3fv(N050);
876    glVertex3fv(P050);
877    glNormal3fv(N051);
878    glVertex3fv(P051);
879    glNormal3fv(N069);
880    glVertex3fv(P069);
881    glEnd();
882    glBegin(GL_POLYGON);
883    glNormal3fv(N051);
884    glVertex3fv(P051);
885    glNormal3fv(N002);
886    glVertex3fv(P002);
887    glNormal3fv(N069);
888    glVertex3fv(P069);
889    glEnd();
890    glBegin(GL_POLYGON);
891    glNormal3fv(N050);
892    glVertex3fv(P050);
893    glNormal3fv(N069);
894    glVertex3fv(P069);
895    glNormal3fv(N002);
896    glVertex3fv(P002);
897    glEnd();
898}
899
900void
901Fish006(void)
902{
903    glBegin(GL_POLYGON);
904    glNormal3fv(N066);
905    glVertex3fv(P066);
906    glNormal3fv(N016);
907    glVertex3fv(P016);
908    glNormal3fv(N026);
909    glVertex3fv(P026);
910    glEnd();
911    glBegin(GL_POLYGON);
912    glNormal3fv(N015);
913    glVertex3fv(P015);
914    glNormal3fv(N066);
915    glVertex3fv(P066);
916    glNormal3fv(N025);
917    glVertex3fv(P025);
918    glEnd();
919    glBegin(GL_POLYGON);
920    glNormal3fv(N025);
921    glVertex3fv(P025);
922    glNormal3fv(N066);
923    glVertex3fv(P066);
924    glNormal3fv(N026);
925    glVertex3fv(P026);
926    glEnd();
927    glBegin(GL_POLYGON);
928    glNormal3fv(N066);
929    glVertex3fv(P066);
930    glNormal3fv(N058);
931    glVertex3fv(P058);
932    glNormal3fv(N016);
933    glVertex3fv(P016);
934    glEnd();
935    glBegin(GL_POLYGON);
936    glNormal3fv(N015);
937    glVertex3fv(P015);
938    glNormal3fv(N058);
939    glVertex3fv(P058);
940    glNormal3fv(N066);
941    glVertex3fv(P066);
942    glEnd();
943    glBegin(GL_POLYGON);
944    glNormal3fv(N058);
945    glVertex3fv(P058);
946    glNormal3fv(N015);
947    glVertex3fv(P015);
948    glNormal3fv(N016);
949    glVertex3fv(P016);
950    glEnd();
951}
952
953void
954Fish007(void)
955{
956    glBegin(GL_POLYGON);
957    glNormal3fv(N062);
958    glVertex3fv(P062);
959    glNormal3fv(N022);
960    glVertex3fv(P022);
961    glNormal3fv(N032);
962    glVertex3fv(P032);
963    glEnd();
964    glBegin(GL_POLYGON);
965    glNormal3fv(N062);
966    glVertex3fv(P062);
967    glNormal3fv(N032);
968    glVertex3fv(P032);
969    glNormal3fv(N064);
970    glVertex3fv(P064);
971    glEnd();
972    glBegin(GL_POLYGON);
973    glNormal3fv(N022);
974    glVertex3fv(P022);
975    glNormal3fv(N062);
976    glVertex3fv(P062);
977    glNormal3fv(N032);
978    glVertex3fv(P032);
979    glEnd();
980    glBegin(GL_POLYGON);
981    glNormal3fv(N062);
982    glVertex3fv(P062);
983    glNormal3fv(N064);
984    glVertex3fv(P064);
985    glNormal3fv(N032);
986    glVertex3fv(P032);
987    glEnd();
988}
989
990void
991Fish008(void)
992{
993    glBegin(GL_POLYGON);
994    glNormal3fv(N063);
995    glVertex3fv(P063);
996    glNormal3fv(N019);
997    glVertex3fv(P019);
998    glNormal3fv(N029);
999    glVertex3fv(P029);
1000    glEnd();
1001    glBegin(GL_POLYGON);
1002    glNormal3fv(N019);
1003    glVertex3fv(P019);
1004    glNormal3fv(N063);
1005    glVertex3fv(P063);
1006    glNormal3fv(N029);
1007    glVertex3fv(P029);
1008    glEnd();
1009    glBegin(GL_POLYGON);
1010    glNormal3fv(N063);
1011    glVertex3fv(P063);
1012    glNormal3fv(N029);
1013    glVertex3fv(P029);
1014    glNormal3fv(N065);
1015    glVertex3fv(P065);
1016    glEnd();
1017    glBegin(GL_POLYGON);
1018    glNormal3fv(N063);
1019    glVertex3fv(P063);
1020    glNormal3fv(N065);
1021    glVertex3fv(P065);
1022    glNormal3fv(N029);
1023    glVertex3fv(P029);
1024    glEnd();
1025}
1026
1027void
1028Fish009(void)
1029{
1030    glBegin(GL_POLYGON);
1031    glVertex3fv(P059);
1032    glVertex3fv(P012);
1033    glVertex3fv(P009);
1034    glVertex3fv(P060);
1035    glEnd();
1036    glBegin(GL_POLYGON);
1037    glVertex3fv(P012);
1038    glVertex3fv(P004);
1039    glVertex3fv(P007);
1040    glVertex3fv(P009);
1041    glEnd();
1042}
1043
1044void
1045Fish_1(void)
1046{
1047    Fish004();
1048    Fish005();
1049    Fish003();
1050    Fish007();
1051    Fish006();
1052    Fish002();
1053    Fish008();
1054    Fish009();
1055    Fish001();
1056}
1057
1058void
1059Fish_2(void)
1060{
1061    Fish005();
1062    Fish004();
1063    Fish003();
1064    Fish008();
1065    Fish006();
1066    Fish002();
1067    Fish007();
1068    Fish009();
1069    Fish001();
1070}
1071
1072void
1073Fish_3(void)
1074{
1075    Fish005();
1076    Fish004();
1077    Fish007();
1078    Fish003();
1079    Fish002();
1080    Fish008();
1081    Fish009();
1082    Fish001();
1083    Fish006();
1084}
1085
1086void
1087Fish_4(void)
1088{
1089    Fish005();
1090    Fish004();
1091    Fish008();
1092    Fish003();
1093    Fish002();
1094    Fish007();
1095    Fish009();
1096    Fish001();
1097    Fish006();
1098}
1099
1100void
1101Fish_5(void)
1102{
1103    Fish009();
1104    Fish006();
1105    Fish007();
1106    Fish001();
1107    Fish002();
1108    Fish003();
1109    Fish008();
1110    Fish004();
1111    Fish005();
1112}
1113
1114void
1115Fish_6(void)
1116{
1117    Fish009();
1118    Fish006();
1119    Fish008();
1120    Fish001();
1121    Fish002();
1122    Fish007();
1123    Fish003();
1124    Fish004();
1125    Fish005();
1126}
1127
1128void
1129Fish_7(void)
1130{
1131    Fish009();
1132    Fish001();
1133    Fish007();
1134    Fish005();
1135    Fish002();
1136    Fish008();
1137    Fish003();
1138    Fish004();
1139    Fish006();
1140}
1141
1142void
1143Fish_8(void)
1144{
1145    Fish009();
1146    Fish008();
1147    Fish001();
1148    Fish002();
1149    Fish007();
1150    Fish003();
1151    Fish005();
1152    Fish004();
1153    Fish006();
1154}
1155
1156void
1157DrawShark(fishRec * fish)
1158{
1159    float mat[4][4];
1160    int n;
1161    float seg1, seg2, seg3, seg4, segup;
1162    float thrash, chomp;
1163
1164    fish->htail = (int) (fish->htail - (int) (5.0 * fish->v)) % 360;
1165
1166    thrash = 50.0 * fish->v;
1167
1168    seg1 = 0.6 * thrash * sin(fish->htail * RRAD);
1169    seg2 = 1.8 * thrash * sin((fish->htail + 45.0) * RRAD);
1170    seg3 = 3.0 * thrash * sin((fish->htail + 90.0) * RRAD);
1171    seg4 = 4.0 * thrash * sin((fish->htail + 110.0) * RRAD);
1172
1173    chomp = 0.0;
1174    if (fish->v > 2.0) {
1175        chomp = -(fish->v - 2.0) * 200.0;
1176    }
1177    P004[1] = iP004[1] + chomp;
1178    P007[1] = iP007[1] + chomp;
1179    P010[1] = iP010[1] + chomp;
1180    P011[1] = iP011[1] + chomp;
1181
1182    P023[0] = iP023[0] + seg1;
1183    P024[0] = iP024[0] + seg1;
1184    P025[0] = iP025[0] + seg1;
1185    P026[0] = iP026[0] + seg1;
1186    P027[0] = iP027[0] + seg1;
1187    P028[0] = iP028[0] + seg1;
1188    P029[0] = iP029[0] + seg1;
1189    P030[0] = iP030[0] + seg1;
1190    P031[0] = iP031[0] + seg1;
1191    P032[0] = iP032[0] + seg1;
1192    P033[0] = iP033[0] + seg2;
1193    P034[0] = iP034[0] + seg2;
1194    P035[0] = iP035[0] + seg2;
1195    P036[0] = iP036[0] + seg2;
1196    P037[0] = iP037[0] + seg2;
1197    P038[0] = iP038[0] + seg2;
1198    P039[0] = iP039[0] + seg2;
1199    P040[0] = iP040[0] + seg2;
1200    P041[0] = iP041[0] + seg2;
1201    P042[0] = iP042[0] + seg2;
1202    P043[0] = iP043[0] + seg3;
1203    P044[0] = iP044[0] + seg3;
1204    P045[0] = iP045[0] + seg3;
1205    P046[0] = iP046[0] + seg3;
1206    P047[0] = iP047[0] + seg3;
1207    P048[0] = iP048[0] + seg3;
1208    P049[0] = iP049[0] + seg3;
1209    P050[0] = iP050[0] + seg3;
1210    P051[0] = iP051[0] + seg3;
1211    P052[0] = iP052[0] + seg3;
1212    P002[0] = iP002[0] + seg4;
1213    P061[0] = iP061[0] + seg4;
1214    P069[0] = iP069[0] + seg4;
1215    P070[0] = iP070[0] + seg4;
1216
1217    fish->vtail += ((fish->dtheta - fish->vtail) * 0.1);
1218
1219    if (fish->vtail > 0.5) {
1220        fish->vtail = 0.5;
1221    } else if (fish->vtail < -0.5) {
1222        fish->vtail = -0.5;
1223    }
1224    segup = thrash * fish->vtail;
1225
1226    P023[1] = iP023[1] + segup;
1227    P024[1] = iP024[1] + segup;
1228    P025[1] = iP025[1] + segup;
1229    P026[1] = iP026[1] + segup;
1230    P027[1] = iP027[1] + segup;
1231    P028[1] = iP028[1] + segup;
1232    P029[1] = iP029[1] + segup;
1233    P030[1] = iP030[1] + segup;
1234    P031[1] = iP031[1] + segup;
1235    P032[1] = iP032[1] + segup;
1236    P033[1] = iP033[1] + segup * 5.0;
1237    P034[1] = iP034[1] + segup * 5.0;
1238    P035[1] = iP035[1] + segup * 5.0;
1239    P036[1] = iP036[1] + segup * 5.0;
1240    P037[1] = iP037[1] + segup * 5.0;
1241    P038[1] = iP038[1] + segup * 5.0;
1242    P039[1] = iP039[1] + segup * 5.0;
1243    P040[1] = iP040[1] + segup * 5.0;
1244    P041[1] = iP041[1] + segup * 5.0;
1245    P042[1] = iP042[1] + segup * 5.0;
1246    P043[1] = iP043[1] + segup * 12.0;
1247    P044[1] = iP044[1] + segup * 12.0;
1248    P045[1] = iP045[1] + segup * 12.0;
1249    P046[1] = iP046[1] + segup * 12.0;
1250    P047[1] = iP047[1] + segup * 12.0;
1251    P048[1] = iP048[1] + segup * 12.0;
1252    P049[1] = iP049[1] + segup * 12.0;
1253    P050[1] = iP050[1] + segup * 12.0;
1254    P051[1] = iP051[1] + segup * 12.0;
1255    P052[1] = iP052[1] + segup * 12.0;
1256    P002[1] = iP002[1] + segup * 17.0;
1257    P061[1] = iP061[1] + segup * 17.0;
1258    P069[1] = iP069[1] + segup * 17.0;
1259    P070[1] = iP070[1] + segup * 17.0;
1260
1261    glPushMatrix();
1262
1263    glTranslatef(0.0, 0.0, -3000.0);
1264
1265    glGetFloatv(GL_MODELVIEW_MATRIX, &mat[0][0]);
1266    n = 0;
1267    if (mat[0][2] >= 0.0) {
1268        n += 1;
1269    }
1270    if (mat[1][2] >= 0.0) {
1271        n += 2;
1272    }
1273    if (mat[2][2] >= 0.0) {
1274        n += 4;
1275    }
1276    glScalef(2.0, 1.0, 1.0);
1277
1278    glEnable(GL_CULL_FACE);
1279    switch (n) {
1280    case 0:
1281        Fish_1();
1282        break;
1283    case 1:
1284        Fish_2();
1285        break;
1286    case 2:
1287        Fish_3();
1288        break;
1289    case 3:
1290        Fish_4();
1291        break;
1292    case 4:
1293        Fish_5();
1294        break;
1295    case 5:
1296        Fish_6();
1297        break;
1298    case 6:
1299        Fish_7();
1300        break;
1301    case 7:
1302        Fish_8();
1303        break;
1304    }
1305    glDisable(GL_CULL_FACE);
1306
1307    glPopMatrix();
1308}
1309