TinyGL 0.4.1 for MinGW
mech.c
Go to the documentation of this file.
1
36/* start of compilation conditions */
37#define SPHERE
38#define COLOR
39#define LIGHT
40#define TORSO
41#define HIP
42#define SHOULDER
43#define UPPER_ARM
44#define LOWER_ARM
45#define ROCKET_POD
46#define UPPER_LEG
47#define LOWER_LEG
48#define NO_NORM
49#define ANIMATION
50#define DRAW_MECH
51#define DRAW_ENVIRO
52#define MOVE_LIGHT
53/* end of compilation conditions */
54
55/* start various header files needed */
56#include <stdlib.h>
57#include <stdio.h>
58#include <math.h>
59
60#define GLUT
61#define GLUT_KEY
62#define GLUT_SPEC
63
64
65#include <windows.h>
66
67#include <GL/gdi.h>
68#include <GL/gl.h>
69#include "glu.h"
70#include "ui.h"
71
72/* end of header files */
73
74/* start of display list definitions */
75#define SOLID_MECH_TORSO 1
76#define SOLID_MECH_HIP 2
77#define SOLID_MECH_SHOULDER 3
78#define SOLID_MECH_UPPER_ARM 4
79#define SOLID_MECH_FOREARM 5
80#define SOLID_MECH_UPPER_LEG 6
81#define SOLID_MECH_FOOT 7
82#define SOLID_MECH_ROCKET 8
83#define SOLID_MECH_VULCAN 9
84#define SOLID_ENVIRO 10
85/* end of display list definitions */
86
87/* start of motion rate variables */
88#define ANKLE_RATE 3
89#define HEEL_RATE 3
90#define ROTATE_RATE 10
91#define TILT_RATE 10
92#define ELBOW_RATE 2
93#define SHOULDER_RATE 5
94#define LAT_RATE 5
95#define CANNON_RATE 40
96#define UPPER_LEG_RATE 3
97#define UPPER_LEG_RATE_GROIN 10
98#define LIGHT_TURN_RATE 10
99#define VIEW_TURN_RATE 10
100/* end of motion rate variables */
101
102/* start of motion variables */
103#ifndef PI
104#define PI 3.141592654
105#endif
106
107char leg = 0;
108
109int shoulder1 = 0, shoulder2 = 0, shoulder3 = 0, shoulder4 = 0, lat1 = 20, lat2 = 20,
110 elbow1 = 0, elbow2 = 0, pivot = 0, tilt = 10, ankle1 = 0, ankle2 = 0, heel1 = 0,
111 heel2 = 0, hip11 = 0, hip12 = 10, hip21 = 0, hip22 = 10, fire = 0, solid_part = 0,
112 anim = 0, turn = 0, turn1 = 0, lightturn = 0, lightturn1 = 0;
113
114float elevation = 0.0, distance = 0.0, frame = 3.0
115 /* foot1v[] = {} foot2v[] = {} */ ;
116
117/* end of motion variables */
118
119/* start of material definitions */
120#ifdef LIGHT
122{0.628281, 0.555802, 0.366065, 1.0};
124{0.24725, 0.1995, 0.0745, 1.0};
126{0.75164, 0.60648, 0.22648, 1.0};
128{128.0 * 0.4};
129
131{0.508273, 0.508273, 0.508373, 1.0};
133{0.19225, 0.19225, 0.19225, 1.0};
135{0.50754, 0.50754, 0.50754, 1.0};
137{128.0 * 0.6};
138
140{0.296648, 0.296648, 0.296648, 1.0};
142{0.25, 0.20725, 0.20725, 1.0};
144{1, 0.829, 0.829, 1.0};
146{128.0 * 0.088};
147
149{0.633, 0.727811, 0.633, 1.0};
151{0.0215, 0.1745, 0.0215, 1.0};
153{0.07568, 0.61424, 0.07568, 1.0};
155{128 * 0.6};
156
158{0.60, 0.60, 0.50, 1.0};
160{0.0, 0.0, 0.0, 1.0};
162{0.5, 0.5, 0.0, 1.0};
164{128.0 * 0.25};
165
166#endif
167/* end of material definitions */
168
169/* start of the body motion functions */
170void
172{
173 heel1 = (heel1 + HEEL_RATE) % 360;
174}
175
176void
178{
179 heel1 = (heel1 - HEEL_RATE) % 360;
180}
181
182void
184{
185 heel2 = (heel2 + HEEL_RATE) % 360;
186}
187
188void
190{
191 heel2 = (heel2 - HEEL_RATE) % 360;
192}
193
194void
196{
197 ankle1 = (ankle1 + ANKLE_RATE) % 360;
198}
199
200void
202{
203 ankle1 = (ankle1 - ANKLE_RATE) % 360;
204}
205
206void
208{
209 ankle2 = (ankle2 + ANKLE_RATE) % 360;
210}
211
212void
214{
215 ankle2 = (ankle2 - ANKLE_RATE) % 360;
216}
217
218void
220{
221 pivot = (pivot + ROTATE_RATE) % 360;
222}
223
224void
226{
227 pivot = (pivot - ROTATE_RATE) % 360;
228}
229
230void
232{
233 tilt = (tilt - TILT_RATE) % 360;
234}
235
236void
238{
239 tilt = (tilt + TILT_RATE) % 360;
240}
241
242void
244{
245 elbow1 = (elbow1 + ELBOW_RATE) % 360;
246}
247
248void
250{
251 elbow1 = (elbow1 - ELBOW_RATE) % 360;
252}
253
254void
256{
257 elbow2 = (elbow2 + ELBOW_RATE) % 360;
258}
259
260void
262{
263 elbow2 = (elbow2 - ELBOW_RATE) % 360;
264}
265
266void
268{
270}
271
272void
274{
276}
277
278void
280{
282}
283
284void
286{
288}
289
290void
292{
294}
295
296void
298{
300}
301
302void
304{
306}
307
308void
310{
312}
313
314void
316{
317 lat1 = (lat1 + LAT_RATE) % 360;
318}
319
320void
322{
323 lat1 = (lat1 - LAT_RATE) % 360;
324}
325
326void
328{
329 lat2 = (lat2 + LAT_RATE) % 360;
330}
331
332void
334{
335 lat2 = (lat2 - LAT_RATE) % 360;
336}
337
338void
340{
341 fire = (fire + CANNON_RATE) % 360;
342}
343
344void
346{
347 hip11 = (hip11 + UPPER_LEG_RATE) % 360;
348}
349
350void
352{
353 hip11 = (hip11 - UPPER_LEG_RATE) % 360;
354}
355
356void
358{
359 hip12 = (hip12 + UPPER_LEG_RATE_GROIN) % 360;
360}
361
362void
364{
365 hip12 = (hip12 - UPPER_LEG_RATE_GROIN) % 360;
366}
367
368void
370{
371 hip21 = (hip21 + UPPER_LEG_RATE) % 360;
372}
373
374void
376{
377 hip21 = (hip21 - UPPER_LEG_RATE) % 360;
378}
379
380void
382{
383 hip22 = (hip22 + UPPER_LEG_RATE_GROIN) % 360;
384}
385
386void
388{
389 hip22 = (hip22 - UPPER_LEG_RATE_GROIN) % 360;
390}
391
392/* end of body motion functions */
393
394/* start of light source position functions */
395void
397{
398 turn = (turn - VIEW_TURN_RATE) % 360;
399}
400
401void
403{
404 turn = (turn + VIEW_TURN_RATE) % 360;
405}
406
407void
409{
410 turn1 = (turn1 - VIEW_TURN_RATE) % 360;
411}
412
413void
415{
416 turn1 = (turn1 + VIEW_TURN_RATE) % 360;
417}
418
419void
421{
423}
424
425void
427{
429}
430
431void
433{
435}
436
437void
439{
441}
442
443/* end of light source position functions */
444
445/* start of geometric shape functions */
446void
447Box(float width, float height, float depth, char solid)
448{
449 char i, j = 0;
450 float x = width / 2.0, y = height / 2.0, z = depth / 2.0;
451
452 for (i = 0; i < 4; i++) {
453 glRotatef(90.0, 0.0, 0.0, 1.0);
454 if (j) {
455 if (!solid)
457 else
459 glNormal3f(-1.0, 0.0, 0.0);
460 glVertex3f(-x, y, z);
461 glVertex3f(-x, -y, z);
462 glVertex3f(-x, -y, -z);
463 glVertex3f(-x, y, -z);
464 glEnd();
465 if (solid) {
467 glNormal3f(0.0, 0.0, 1.0);
468 glVertex3f(0.0, 0.0, z);
469 glVertex3f(-x, y, z);
470 glVertex3f(-x, -y, z);
471 glNormal3f(0.0, 0.0, -1.0);
472 glVertex3f(0.0, 0.0, -z);
473 glVertex3f(-x, -y, -z);
474 glVertex3f(-x, y, -z);
475 glEnd();
476 }
477 j = 0;
478 } else {
479 if (!solid)
481 else
483 glNormal3f(-1.0, 0.0, 0.0);
484 glVertex3f(-y, x, z);
485 glVertex3f(-y, -x, z);
486 glVertex3f(-y, -x, -z);
487 glVertex3f(-y, x, -z);
488 glEnd();
489 if (solid) {
491 glNormal3f(0.0, 0.0, 1.0);
492 glVertex3f(0.0, 0.0, z);
493 glVertex3f(-y, x, z);
494 glVertex3f(-y, -x, z);
495 glNormal3f(0.0, 0.0, -1.0);
496 glVertex3f(0.0, 0.0, -z);
497 glVertex3f(-y, -x, -z);
498 glVertex3f(-y, x, -z);
499 glEnd();
500 }
501 j = 1;
502 }
503 }
504}
505
506void
507Octagon(float side, float height, char solid)
508{
509 char j;
510 float x = sin(0.785398163) * side, y = side / 2.0, z = height / 2.0, c;
511
512 c = x + y;
513 for (j = 0; j < 8; j++) {
514 glTranslatef(-c, 0.0, 0.0);
515 if (!solid)
517 else
519 glNormal3f(-1.0, 0.0, 0.0);
520 glVertex3f(0.0, -y, z);
521 glVertex3f(0.0, y, z);
522 glVertex3f(0.0, y, -z);
523 glVertex3f(0.0, -y, -z);
524 glEnd();
525 glTranslatef(c, 0.0, 0.0);
526 if (solid) {
528 glNormal3f(0.0, 0.0, 1.0);
529 glVertex3f(0.0, 0.0, z);
530 glVertex3f(-c, -y, z);
531 glVertex3f(-c, y, z);
532 glNormal3f(0.0, 0.0, -1.0);
533 glVertex3f(0.0, 0.0, -z);
534 glVertex3f(-c, y, -z);
535 glVertex3f(-c, -y, -z);
536 glEnd();
537 }
538 glRotatef(45.0, 0.0, 0.0, 1.0);
539 }
540}
541
542/* end of geometric shape functions */
543#ifdef NORM
544void
545Normalize(float v[3])
546{
547 GLfloat d = sqrt(v[1] * v[1] + v[2] * v[2] + v[3] * v[3]);
548
549 if (d == 0.0) {
550 printf("zero length vector");
551 return;
552 }
553 v[1] /= d;
554 v[2] /= d;
555 v[3] /= d;
556}
557
558void
559NormXprod(float v1[3], float v2[3], float v[3], float out[3])
560{
561 GLint i, j;
562 GLfloat length;
563
564 out[0] = v1[1] * v2[2] - v1[2] * v2[1];
565 out[1] = v1[2] * v2[0] - v1[0] * v2[2];
566 out[2] = v1[0] * v2[1] - v1[1] * v2[0];
567 Normalize(out);
568}
569
570#endif
571
572void
573SetMaterial(GLfloat spec[], GLfloat amb[], GLfloat diff[], GLfloat shin[])
574{
575
580}
581
582void
583MechTorso(char solid)
584{
586#ifdef LIGHT
588#endif
589 glColor3f(1.0, 1.0, 0.0);
590 Box(1.0, 1.0, 3.0, solid);
591 glTranslatef(0.75, 0.0, 0.0);
592#ifdef LIGHT
594#endif
595 glColor3f(0.5, 0.5, 0.5);
596 Box(0.5, 0.6, 2.0, solid);
597 glTranslatef(-1.5, 0.0, 0.0);
598 Box(0.5, 0.6, 2.0, solid);
599 glTranslatef(0.75, 0.0, 0.0);
600 glEndList();
601}
602
603void
604MechHip(char solid)
605{
606 int i;
607 GLUquadricObj *hip[2];
608
610#ifdef LIGHT
612#endif
613 glColor3f(1.0, 1.0, 0.0);
614 Octagon(0.7, 0.5, solid);
615#ifdef SPHERE
616 for (i = 0; i < 2; i++) {
617 if (i)
618 glScalef(-1.0, 1.0, 1.0);
619 glTranslatef(1.0, 0.0, 0.0);
620 hip[i] = gluNewQuadric();
621#ifdef LIGHT
623#endif
624 glColor3f(0.5, 0.5, 0.5);
625 if (!solid)
627 gluSphere(hip[0], 0.2, 16, 16);
628 glTranslatef(-1.0, 0.0, 0.0);
629 }
630 glScalef(-1.0, 1.0, 1.0);
631#endif
632 glEndList();
633}
634
635void
636Shoulder(char solid)
637{
638 GLUquadricObj *deltoid = gluNewQuadric();
639
641#ifdef LIGHT
643#endif
644 glColor3f(1.0, 1.0, 0.0);
645 Box(1.0, 0.5, 0.5, solid);
646 glTranslatef(0.9, 0.0, 0.0);
647#ifdef LIGHT
649#endif
650 glColor3f(0.5, 0.5, 0.5);
651#ifdef SPHERE
652 if (!solid)
654 gluSphere(deltoid, 0.6, 16, 16);
655#endif
656 glTranslatef(-0.9, 0.0, 0.0);
657 glEndList();
658}
659
660void
661UpperArm(char solid)
662{
663 GLUquadricObj *upper = gluNewQuadric();
664 GLUquadricObj *joint[2];
665 GLUquadricObj *joint1[2];
666 int i;
667
669#ifdef LIGHT
671#endif
672 glColor3f(1.0, 1.0, 0.0);
673 Box(1.0, 2.0, 1.0, solid);
674 glTranslatef(0.0, -0.95, 0.0);
675 glRotatef(90.0, 1.0, 0.0, 0.0);
676#ifdef LIGHT
678#endif
679 glColor3f(0.5, 0.5, 0.5);
680 if (!solid)
682 gluCylinder(upper, 0.4, 0.4, 1.5, 16, 10);
683#ifdef LIGHT
685#endif
686 glColor3f(1.0, 1.0, 0.0);
687 glRotatef(-90.0, 1.0, 0.0, 0.0);
688 glTranslatef(-0.4, -1.85, 0.0);
689 glRotatef(90.0, 0.0, 1.0, 0.0);
690 for (i = 0; i < 2; i++) {
691 joint[i] = gluNewQuadric();
692 if (!solid)
693 gluQuadricDrawStyle(joint[i], GLU_LINE);
694 if (i)
695 gluCylinder(joint[i], 0.5, 0.5, 0.8, 16, 10);
696 else
697 gluCylinder(joint[i], 0.2, 0.2, 0.8, 16, 10);
698 }
699 for (i = 0; i < 2; i++) {
700 if (i)
701 glScalef(-1.0, 1.0, 1.0);
702 joint1[i] = gluNewQuadric();
703 if (!solid)
704 gluQuadricDrawStyle(joint1[i], GLU_LINE);
705 if (i)
706 glTranslatef(0.0, 0.0, 0.8);
707 gluDisk(joint1[i], 0.2, 0.5, 16, 10);
708 if (i)
709 glTranslatef(0.0, 0.0, -0.8);
710 }
711 glScalef(-1.0, 1.0, 1.0);
712 glRotatef(-90.0, 0.0, 1.0, 0.0);
713 glTranslatef(0.4, 2.9, 0.0);
714 glEndList();
715}
716
717void
718VulcanGun(char solid)
719{
720 int i;
721 GLUquadricObj *Barrel[5];
722 GLUquadricObj *BarrelFace[5];
723 GLUquadricObj *Barrel2[5];
724 GLUquadricObj *Barrel3[5];
725 GLUquadricObj *BarrelFace2[5];
726 GLUquadricObj *Mount = gluNewQuadric();
727 GLUquadricObj *Mount_face = gluNewQuadric();
728
730
731#ifdef LIGHT
733#endif
734 glColor3f(0.5, 0.5, 0.5);
735
736 if (!solid) {
738 gluQuadricDrawStyle(Mount_face, GLU_LINE);
739 }
740 gluCylinder(Mount, 0.5, 0.5, 0.5, 16, 10);
741 glTranslatef(0.0, 0.0, 0.5);
742 gluDisk(Mount_face, 0.0, 0.5, 16, 10);
743
744 for (i = 0; i < 5; i++) {
745 Barrel[i] = gluNewQuadric();
746 BarrelFace[i] = gluNewQuadric();
747 BarrelFace2[i] = gluNewQuadric();
748 Barrel2[i] = gluNewQuadric();
749 Barrel3[i] = gluNewQuadric();
750 glRotatef(72.0, 0.0, 0.0, 1.0);
751 glTranslatef(0.0, 0.3, 0.0);
752 if (!solid) {
753 gluQuadricDrawStyle(Barrel[i], GLU_LINE);
754 gluQuadricDrawStyle(BarrelFace[i], GLU_LINE);
755 gluQuadricDrawStyle(BarrelFace2[i], GLU_LINE);
756 gluQuadricDrawStyle(Barrel2[i], GLU_LINE);
757 gluQuadricDrawStyle(Barrel3[i], GLU_LINE);
758 }
759 gluCylinder(Barrel[i], 0.15, 0.15, 2.0, 16, 10);
760 gluCylinder(Barrel3[i], 0.06, 0.06, 2.0, 16, 10);
761 glTranslatef(0.0, 0.0, 2.0);
762 gluDisk(BarrelFace[i], 0.1, 0.15, 16, 10);
763 gluCylinder(Barrel2[i], 0.1, 0.1, 0.1, 16, 5);
764 glTranslatef(0.0, 0.0, 0.1);
765 gluDisk(BarrelFace2[i], 0.06, 0.1, 16, 5);
766 glTranslatef(0.0, -0.3, -2.1);
767 }
768 glEndList();
769}
770
771void
772ForeArm(char solid)
773{
774 char i;
775
777#ifdef LIGHT
779#endif
780 glColor3f(1.0, 1.0, 0.0);
781 for (i = 0; i < 5; i++) {
782 glTranslatef(0.0, -0.1, -0.15);
783 Box(0.6, 0.8, 0.2, solid);
784 glTranslatef(0.0, 0.1, -0.15);
785 Box(0.4, 0.6, 0.1, solid);
786 }
787 glTranslatef(0.0, 0.0, 2.45);
788 Box(1.0, 1.0, 2.0, solid);
789 glTranslatef(0.0, 0.0, -1.0);
790 glEndList();
791}
792
793void
794UpperLeg(char solid)
795{
796 int i;
797 GLUquadricObj *Hamstring = gluNewQuadric();
799 GLUquadricObj *joint[2];
800
802#ifdef LIGHT
804#endif
805 glColor3f(1.0, 1.0, 0.0);
806 if (!solid) {
807 gluQuadricDrawStyle(Hamstring, GLU_LINE);
809 }
810 glTranslatef(0.0, -1.0, 0.0);
811 Box(0.4, 1.0, 0.7, solid);
812 glTranslatef(0.0, -0.65, 0.0);
813 for (i = 0; i < 5; i++) {
814 Box(1.2, 0.3, 1.2, solid);
815 glTranslatef(0.0, -0.2, 0.0);
816 Box(1.0, 0.1, 1.0, solid);
817 glTranslatef(0.0, -0.2, 0.0);
818 }
819 glTranslatef(0.0, -0.15, -0.4);
820 Box(2.0, 0.5, 2.0, solid);
821 glTranslatef(0.0, -0.3, -0.2);
822 glRotatef(90.0, 1.0, 0.0, 0.0);
823#ifdef LIGHT
825#endif
826 glColor3f(0.5, 0.5, 0.5);
827 gluCylinder(Hamstring, 0.6, 0.6, 3.0, 16, 10);
828#ifdef LIGHT
830#endif
831 glColor3f(1.0, 1.0, 0.0);
832 glRotatef(-90.0, 1.0, 0.0, 0.0);
833 glTranslatef(0.0, -1.5, 1.0);
834 Box(1.5, 3.0, 0.5, solid);
835 glTranslatef(0.0, -1.75, -0.8);
836 Box(2.0, 0.5, 2.0, solid);
837 glTranslatef(0.0, -0.9, -0.85);
838#ifdef LIGHT
840#endif
841 glColor3f(0.5, 0.5, 0.5);
842 gluCylinder(Knee, 0.8, 0.8, 1.8, 16, 10);
843 for (i = 0; i < 2; i++) {
844 if (i)
845 glScalef(-1.0, 1.0, 1.0);
846 joint[i] = gluNewQuadric();
847 if (!solid)
848 gluQuadricDrawStyle(joint[i], GLU_LINE);
849 if (i)
850 glTranslatef(0.0, 0.0, 1.8);
851 gluDisk(joint[i], 0.0, 0.8, 16, 10);
852 if (i)
853 glTranslatef(0.0, 0.0, -1.8);
854 }
855 glScalef(-1.0, 1.0, 1.0);
856 glEndList();
857}
858
859void
860Foot(char solid)
861{
862
864#ifdef LIGHT
866#endif
867 glColor3f(0.5, 0.5, 0.5);
868 glRotatef(90.0, 1.0, 0.0, 0.0);
869 Octagon(1.5, 0.6, solid);
870 glRotatef(-90.0, 1.0, 0.0, 0.0);
871 glEndList();
872}
873
874void
875LowerLeg(char solid)
876{
877 float k, l;
878 GLUquadricObj *ankle = gluNewQuadric();
879 GLUquadricObj *ankle_face[2],*joints;
880
881#ifdef LIGHT
883#endif
884 glColor3f(1.0, 1.0, 0.0);
885 for (k = 0.0; k < 2.0; k++) {
886 for (l = 0.0; l < 2.0; l++) {
887 glPushMatrix();
888 glTranslatef(k, 0.0, l);
889#ifdef LIGHT
891#endif
892 glColor3f(1.0, 1.0, 0.0);
893 Box(1.0, 0.5, 1.0, solid);
894 glTranslatef(0.0, -0.45, 0.0);
895#ifdef LIGHT
897#endif
898 glColor3f(0.5, 0.5, 0.5);
899#ifdef SPHERE
900 joints = gluNewQuadric();
901 if(!solid)gluQuadricDrawStyle(joints, GLU_LINE);
902 gluSphere(joints,0.2, 16, 16);
903 free(joints);
904#endif
905 if (leg)
906 glRotatef((GLfloat) heel1, 1.0, 0.0, 0.0);
907 else
908 glRotatef((GLfloat) heel2, 1.0, 0.0, 0.0);
909 /* glTranslatef(0.0, -0.2, 0.0); */
910 glTranslatef(0.0, -1.7, 0.0);
911#ifdef LIGHT
913#endif
914 glColor3f(1.0, 1.0, 0.0);
915 Box(0.25, 3.0, 0.25, solid);
916 glTranslatef(0.0, -1.7, 0.0);
917#ifdef LIGHT
919#endif
920 glColor3f(0.5, 0.5, 0.5);
921#ifdef SPHERE
922 joints = gluNewQuadric();
923 if(!solid)gluQuadricDrawStyle(joints, GLU_LINE);
924 gluSphere(joints, 0.2, 16, 16);
925#endif
926 if (leg)
927 glRotatef((GLfloat) - heel1, 1.0, 0.0, 0.0);
928 else
929 glRotatef((GLfloat) - heel2, 1.0, 0.0, 0.0);
930 glTranslatef(0.0, -0.45, 0.0);
931#ifdef LIGHT
933#endif
934 glColor3f(1.0, 1.0, 0.0);
935 Box(1.0, 0.5, 1.0, solid);
936 if (!k && !l) {
937 int j;
938
939 glTranslatef(-0.4, -0.8, 0.5);
940 if (leg)
941 glRotatef((GLfloat) ankle1, 1.0, 0.0, 0.0);
942 else
943 glRotatef((GLfloat) ankle2, 1.0, 0.0, 0.0);
944 glRotatef(90.0, 0.0, 1.0, 0.0);
945 if (!solid)
947 gluCylinder(ankle, 0.8, 0.8, 1.8, 16, 10);
948 for (j = 0; j < 2; j++) {
949 ankle_face[j] = gluNewQuadric();
950 if (!solid)
951 gluQuadricDrawStyle(ankle_face[j], GLU_LINE);
952 if (j) {
953 glScalef(-1.0, 1.0, 1.0);
954 glTranslatef(0.0, 0.0, 1.8);
955 }
956 gluDisk(ankle_face[j], 0.0, 0.8, 16, 10);
957 if (j)
958 glTranslatef(0.0, 0.0, -1.8);
959 }
960 glScalef(-1.0, 1.0, 1.0);
961 glRotatef(-90.0, 0.0, 1.0, 0.0);
962 glTranslatef(0.95, -0.8, 0.0);
964 }
965 glPopMatrix();
966 }
967 }
968}
969
970void
971RocketPod(char solid)
972{
973
974 int i, j, k = 0;
975 GLUquadricObj *rocket[6];
976 GLUquadricObj *rocket1[6];
977
979#ifdef LIGHT
981#endif
982 glColor3f(0.5, 0.5, 0.5);
983 glScalef(0.4, 0.4, 0.4);
984 glRotatef(45.0, 0.0, 0.0, 1.0);
985 glTranslatef(1.0, 0.0, 0.0);
986 Box(2.0, 0.5, 3.0, solid);
987 glTranslatef(1.0, 0.0, 0.0);
988 glRotatef(45.0, 0.0, 0.0, 1.0);
989 glTranslatef(0.5, 0.0, 0.0);
990 Box(1.2, 0.5, 3.0, solid);
991 glTranslatef(2.1, 0.0, 0.0);
992 glRotatef(-90.0, 0.0, 0.0, 1.0);
993#ifdef LIGHT
995#endif
996 glColor3f(1.0, 1.0, 0.0);
997 Box(2.0, 3.0, 4.0, solid);
998 glTranslatef(-0.5, -1.0, 1.3);
999 for (i = 0; i < 2; i++) {
1000 for (j = 0; j < 3; j++) {
1001 rocket[k] = gluNewQuadric();
1002 rocket1[k] = gluNewQuadric();
1003 if (!solid) {
1004 gluQuadricDrawStyle(rocket[k], GLU_LINE);
1005 gluQuadricDrawStyle(rocket1[k], GLU_LINE);
1006 }
1007 glTranslatef(i, j, 0.6);
1008#ifdef LIGHT
1010#endif
1011 glColor3f(1.0, 1.0, 1.0);
1012 gluCylinder(rocket[k], 0.4, 0.4, 0.3, 16, 10);
1013 glTranslatef(0.0, 0.0, 0.3);
1014#ifdef LIGHT
1016#endif
1017 glColor3f(0.0, 1.0, 0.0);
1018 gluCylinder(rocket1[k], 0.4, 0.0, 0.5, 16, 10);
1019 k++;
1020 glTranslatef(-i, -j, -0.9);
1021 }
1022 }
1023 glEndList();
1024}
1025
1026void
1027Enviro(char solid)
1028{
1029
1030 int i, j;
1031
1034 glColor3f(0.0, 1.0, 0.0);
1035 Box(20.0, 0.5, 30.0, solid);
1036
1038 glColor3f(0.6, 0.6, 0.6);
1039 glTranslatef(0.0, 0.0, -10.0);
1040 for (j = 0; j < 6; j++) {
1041 for (i = 0; i < 2; i++) {
1042 if (i)
1043 glScalef(-1.0, 1.0, 1.0);
1044 glTranslatef(10.0, 4.0, 0.0);
1045 Box(4.0, 8.0, 2.0, solid);
1046 glTranslatef(0.0, -1.0, -3.0);
1047 Box(4.0, 6.0, 2.0, solid);
1048 glTranslatef(-10.0, -3.0, 3.0);
1049 }
1050 glScalef(-1.0, 1.0, 1.0);
1051 glTranslatef(0.0, 0.0, 5.0);
1052 }
1053
1054 glEndList();
1055}
1056
1057void
1059{
1060 if (solid_part)
1061 solid_part = 0;
1062 else
1063 solid_part = 1;
1064}
1065
1066void
1068{
1073}
1074
1075void
1077{
1078
1079 GLfloat position[] =
1080 {0.0, 0.0, 2.0, 1.0};
1081
1082#ifdef MOVE_LIGHT
1083 glRotatef((GLfloat) lightturn1, 1.0, 0.0, 0.0);
1084 glRotatef((GLfloat) lightturn, 0.0, 1.0, 0.0);
1085 glRotatef(0.0, 1.0, 0.0, 0.0);
1086#endif
1090 /* glEnable(GL_FLAT); */
1091 /* glDepthFunc(GL_LESS); */
1093
1094 glLightfv(GL_LIGHT0, GL_POSITION, position);
1096
1097 glTranslatef(0.0, 0.0, 2.0);
1099 Box(0.1, 0.1, 0.1, 0);
1101 /* glEnable(GL_CULL_FACE); */
1102}
1103
1104void
1106{
1107 int i, j;
1108
1109 glScalef(0.5, 0.5, 0.5);
1110 glPushMatrix();
1111 glTranslatef(0.0, -0.75, 0.0);
1112 glRotatef((GLfloat) tilt, 1.0, 0.0, 0.0);
1113
1114 glRotatef(90.0, 1.0, 0.0, 0.0);
1115#ifdef HIP
1117#endif
1118 glRotatef(-90.0, 1.0, 0.0, 0.0);
1119
1120 glTranslatef(0.0, 0.75, 0.0);
1121 glPushMatrix();
1122 glRotatef((GLfloat) pivot, 0.0, 1.0, 0.0);
1123 glPushMatrix();
1124#ifdef TORSO
1126#endif
1127 glPopMatrix();
1128 glPushMatrix();
1129 glTranslatef(0.5, 0.5, 0.0);
1130#ifdef ROCKET_POD
1132#endif
1133 glPopMatrix();
1134 for (i = 0; i < 2; i++) {
1135 glPushMatrix();
1136 if (i)
1137 glScalef(-1.0, 1.0, 1.0);
1138 glTranslatef(1.5, 0.0, 0.0);
1139#ifdef SHOULDER
1141#endif
1142 glTranslatef(0.9, 0.0, 0.0);
1143 if (i) {
1144 glRotatef((GLfloat) lat1, 0.0, 0.0, 1.0);
1145 glRotatef((GLfloat) shoulder1, 1.0, 0.0, 0.0);
1146 glRotatef((GLfloat) shoulder3, 0.0, 1.0, 0.0);
1147 } else {
1148 glRotatef((GLfloat) lat2, 0.0, 0.0, 1.0);
1149 glRotatef((GLfloat) shoulder2, 1.0, 0.0, 0.0);
1150 glRotatef((GLfloat) shoulder4, 0.0, 1.0, 0.0);
1151 }
1152 glTranslatef(0.0, -1.4, 0.0);
1153#ifdef UPPER_ARM
1155#endif
1156 glTranslatef(0.0, -2.9, 0.0);
1157 if (i)
1158 glRotatef((GLfloat) elbow1, 1.0, 0.0, 0.0);
1159 else
1160 glRotatef((GLfloat) elbow2, 1.0, 0.0, 0.0);
1161 glTranslatef(0.0, -0.9, -0.2);
1162#ifdef LOWER_ARM
1164 glPushMatrix();
1165 glTranslatef(0.0, 0.0, 2.0);
1166 glRotatef((GLfloat) fire, 0.0, 0.0, 1.0);
1168 glPopMatrix();
1169#endif
1170 glPopMatrix();
1171 }
1172 glPopMatrix();
1173
1174 glPopMatrix();
1175
1176 for (j = 0; j < 2; j++) {
1177 glPushMatrix();
1178 if (j) {
1179 glScalef(-0.5, 0.5, 0.5);
1180 leg = 1;
1181 } else {
1182 glScalef(0.5, 0.5, 0.5);
1183 leg = 0;
1184 }
1185 glTranslatef(2.0, -1.5, 0.0);
1186 if (j) {
1187 glRotatef((GLfloat) hip11, 1.0, 0.0, 0.0);
1188 glRotatef((GLfloat) hip12, 0.0, 0.0, 1.0);
1189 } else {
1190 glRotatef((GLfloat) hip21, 1.0, 0.0, 0.0);
1191 glRotatef((GLfloat) hip22, 0.0, 0.0, 1.0);
1192 }
1193 glTranslatef(0.0, 0.3, 0.0);
1194#ifdef UPPER_LEG
1195 glPushMatrix();
1197 glPopMatrix();
1198#endif
1199 glTranslatef(0.0, -8.3, -0.4);
1200 if (j)
1201 glRotatef((GLfloat) - hip12, 0.0, 0.0, 1.0);
1202 else
1203 glRotatef((GLfloat) - hip22, 0.0, 0.0, 1.0);
1204 glTranslatef(-0.5, -0.85, -0.5);
1205#ifdef LOWER_LEG
1206 LowerLeg(1);
1207#endif
1208 glPopMatrix();
1209 }
1210}
1211
1212void
1214{
1215 glClearColor(0.0, 0.0, 0.0, 0.0);
1218
1219 glPushMatrix();
1220 glRotatef((GLfloat) turn, 0.0, 1.0, 0.0);
1221 glRotatef((GLfloat) turn1, 1.0, 0.0, 0.0);
1222#ifdef LIGHT
1223 if (solid_part) {
1224 glPushMatrix();
1225 lighting();
1226 glPopMatrix();
1227 } else
1228 disable();
1229#endif
1230#ifdef DRAW_MECH
1231 glPushMatrix();
1232 glTranslatef(0.0, elevation, 0.0);
1233 DrawMech();
1234 glPopMatrix();
1235#endif
1236#ifdef DRAW_ENVIRO
1237 glPushMatrix();
1238 if (distance >= 20.136)
1239 distance = 0.0;
1240 glTranslatef(0.0, -5.0, -distance);
1242 glTranslatef(0.0, 0.0, 10.0);
1244 glPopMatrix();
1245#endif
1246 glPopMatrix();
1247 glFlush();
1248 tkSwapBuffers();
1249}
1250
1251void
1252init(void)
1253{
1254 char i = 1;
1255
1256#ifdef LIGHT
1258#endif
1260 MechTorso(i);
1261 MechHip(i);
1262 Shoulder(i);
1263 RocketPod(i);
1264 UpperArm(i);
1265 ForeArm(i);
1266 UpperLeg(i);
1267 Foot(i);
1268 VulcanGun(i);
1269 Enviro(i);
1270}
1271
1272void
1273reshape(int w, int h)
1274{
1275 glViewport(0, 0, w, h);
1278 gluPerspective(65.0, (GLfloat) w / (GLfloat) h, 1.0, 20.0);
1281 glTranslatef(0.0, 1.2, -5.5); /* viewing transform */
1282}
1283
1284#ifdef ANIMATION
1285void
1287{
1288 float angle;
1289 static int step;
1290
1291 if (step == 0 || step == 2) {
1292 /* for(frame=3.0; frame<=21.0; frame=frame+3.0){ */
1293 if (frame >= 0.0 && frame <= 21.0) {
1294 if (frame == 0.0)
1295 frame = 3.0;
1296 angle = (180 / PI) * (acos(((cos((PI / 180) * frame) * 2.043) + 1.1625) / 3.2059));
1297 if (frame > 0) {
1298 elevation = -(3.2055 - (cos((PI / 180) * angle) * 3.2055));
1299 } else
1300 elevation = 0.0;
1301 if (step == 0) {
1302 hip11 = -(frame * 1.7);
1303 if (1.7 * frame > 15)
1304 heel1 = frame * 1.7;
1305 heel2 = 0;
1306 ankle1 = frame * 1.7;
1307 if (frame > 0)
1308 hip21 = angle;
1309 else
1310 hip21 = 0;
1311 ankle2 = -hip21;
1312 shoulder1 = frame * 1.5;
1313 shoulder2 = -frame * 1.5;
1314 elbow1 = frame;
1315 elbow2 = -frame;
1316 } else {
1317 hip21 = -(frame * 1.7);
1318 if (1.7 * frame > 15)
1319 heel2 = frame * 1.7;
1320 heel1 = 0;
1321 ankle2 = frame * 1.7;
1322 if (frame > 0)
1323 hip11 = angle;
1324 else
1325 hip11 = 0;
1326 ankle1 = -hip11;
1327 shoulder1 = -frame * 1.5;
1328 shoulder2 = frame * 1.5;
1329 elbow1 = -frame;
1330 elbow2 = frame;
1331 }
1332 if (frame == 21)
1333 step++;
1334 if (frame < 21)
1335 frame = frame + 3.0;
1336 }
1337 }
1338 if (step == 1 || step == 3) {
1339 /* for(x=21.0; x>=0.0; x=x-3.0){ */
1340 if (frame <= 21.0 && frame >= 0.0) {
1341 angle = (180 / PI) * (acos(((cos((PI / 180) * frame) * 2.043) + 1.1625) / 3.2029));
1342 if (frame > 0)
1343 elevation = -(3.2055 - (cos((PI / 180) * angle) * 3.2055));
1344 else
1345 elevation = 0.0;
1346 if (step == 1) {
1347 elbow2 = hip11 = -frame;
1348 elbow1 = heel1 = frame;
1349 heel2 = 15;
1350 ankle1 = frame;
1351 if (frame > 0)
1352 hip21 = angle;
1353 else
1354 hip21 = 0;
1355 ankle2 = -hip21;
1356 shoulder1 = 1.5 * frame;
1357 shoulder2 = -frame * 1.5;
1358 } else {
1359 elbow1 = hip21 = -frame;
1360 elbow2 = heel2 = frame;
1361 heel1 = 15;
1362 ankle2 = frame;
1363 if (frame > 0)
1364 hip11 = angle;
1365 else
1366 hip11 = 0;
1367 ankle1 = -hip11;
1368 shoulder1 = -frame * 1.5;
1369 shoulder2 = frame * 1.5;
1370 }
1371 if (frame == 0.0)
1372 step++;
1373 if (frame > 0)
1374 frame = frame - 3.0;
1375 }
1376 }
1377 if (step == 4)
1378 step = 0;
1379 distance += 0.1678;
1380}
1381
1382void
1384{
1386}
1387
1388#endif
1389
1391{
1392
1393 int i = 0;
1394
1395 switch (key) {
1396 /* start arm control functions */
1397 case 'q':{
1399 i++;
1400 }
1401 break;
1402 case 'a':{
1403 shoulder2Add();
1404 i++;
1405 }
1406 break;
1407 case 'w':{
1409 i++;
1410 }
1411 break;
1412 case 's':{
1413 shoulder1Add();
1414 i++;
1415 }
1416 break;
1417 case '2':{
1418 shoulder3Add();
1419 i++;
1420 }
1421 break;
1422 case '1':{
1423 shoulder4Add();
1424 i++;
1425 }
1426 break;
1427 case '4':{
1429 i++;
1430 }
1431 break;
1432 case '3':{
1434 i++;
1435 }
1436 break;
1437
1438 case 'z':{
1439 lat2Raise();
1440 i++;
1441 }
1442 break;
1443 case 'Z':{
1444 lat2Lower();
1445 i++;
1446 }
1447 break;
1448 case 'x':{
1449 lat1Raise();
1450 i++;
1451 }
1452 break;
1453 case 'X':{
1454 lat1Lower();
1455 i++;
1456 }
1457 break;
1458
1459 case 'A':{
1460 elbow2Add();
1461 i++;
1462 }
1463 break;
1464 case 'Q':{
1466 i++;
1467 }
1468 break;
1469 case 'S':{
1470 elbow1Add();
1471 i++;
1472 }
1473 break;
1474 case 'W':{
1476 i++;
1477 }
1478 break;
1479 /* end of arm control functions */
1480
1481 /* start of torso control functions */
1482 case 'd':{
1483 RotateAdd();
1484 i++;
1485 }
1486 break;
1487 case 'g':{
1489 i++;
1490 }
1491 break;
1492 case 'r':{
1493 MechTiltAdd();
1494 i++;
1495 }
1496 break;
1497 case 'f':{
1499 i++;
1500 }
1501 break;
1502 /* end of torso control functions */
1503
1504 /* start of leg control functions */
1505 case 'h':{
1507 i++;
1508 }
1509 break;
1510 case 'y':{
1512 i++;
1513 }
1514 break;
1515 case 'Y':{
1517 i++;
1518 }
1519 break;
1520 case 'H':{
1522 i++;
1523 }
1524 break;
1525
1526 case 'j':{
1528 i++;
1529 }
1530 break;
1531 case 'u':{
1533 i++;
1534 }
1535 break;
1536 case 'U':{
1538 i++;
1539 }
1540 break;
1541 case 'J':{
1543 i++;
1544 }
1545 break;
1546
1547 case 'N':{
1548 Heel2Add();
1549 i++;
1550 }
1551 break;
1552 case 'n':{
1553 Heel2Subtract();
1554 i++;
1555 }
1556 break;
1557 case 'M':{
1558 Heel1Add();
1559 i++;
1560 }
1561 break;
1562 case 'm':{
1563 Heel1Subtract();
1564 i++;
1565 }
1566 break;
1567
1568 case 'k':{
1569 Ankle2Add();
1570 i++;
1571 }
1572 break;
1573 case 'K':{
1575 i++;
1576 }
1577 break;
1578 case 'l':{
1579 Ankle1Add();
1580 i++;
1581 }
1582 break;
1583 case 'L':{
1585 i++;
1586 }
1587 break;
1588 /* end of leg control functions */
1589
1590 /* start of light source position functions */
1591 case 'p':{
1593 i++;
1594 }
1595 break;
1596 case 'i':{
1597 LightTurnLeft();
1598 i++;
1599 }
1600 break;
1601 case 'o':{
1602 LightForwards();
1603 i++;
1604 }
1605 break;
1606 case '9':{
1608 i++;
1609 }
1610 break;
1611 /* end of light source position functions */
1612
1613 /* start of misc functions */
1614 case 't':
1615 Toggle();
1616 break;
1617
1618 case KEY_LEFT:
1619 TurnLeft();
1620 break;
1621 case KEY_RIGHT:
1622 TurnRight();
1623 break;
1624 case KEY_UP:
1625 TurnBackwards();
1626 break;
1627 case KEY_DOWN:
1628 TurnForwards();
1629 break;
1630
1631 case ' ':
1632 FireCannon();
1633 }
1634 return 0;
1635}
1636
1637void printHelp(void)
1638{
1639 printf("at the shoulders:");
1640 printf("forward : q,w");
1641 printf("backwards : a,s");
1642 printf("outwards : z,x");
1643 printf("inwards : Z,X");
1644#if 0
1645 glut_menu[6] = glutCreateMenu(null_select);
1646 printf("upwards : Q,W\n");
1647 printf("downwards : A,S\n");
1648 printf("outwards : 1,2\n");
1649 printf("inwards : 3,4\n");
1650
1651 glut_menu[1] = glutCreateMenu(null_select);
1652 printf(" : Page_up\n");
1653
1654 glut_menu[8] = glutCreateMenu(null_select);
1655 printf("forward : y,u\n");
1656 printf("backwards : h.j\n");
1657 printf("outwards : Y,U\n");
1658 printf("inwards : H,J\n");
1659
1660 glut_menu[9] = glutCreateMenu(null_select);
1661 printf("forward : n,m\n");
1662 printf("backwards : N,M\n");
1663
1664 glut_menu[9] = glutCreateMenu(null_select);
1665 printf("forward : n,m\n");
1666 printf("backwards : N,M\n");
1667
1668 glut_menu[10] = glutCreateMenu(null_select);
1669 printf("toes up : K,L\n");
1670 printf("toes down : k,l\n");
1671
1672 glut_menu[11] = glutCreateMenu(null_select);
1673 printf("right : right arrow\n");
1674 printf("left : left arrow\n");
1675 printf("down : up arrow\n");
1676 printf("up : down arrow\n");
1677
1678 glut_menu[12] = glutCreateMenu(null_select);
1679 printf("right : p\n");
1680 printf("left : i\n");
1681 printf("up : 9\n");
1682 printf("down : o\n");
1683
1684 glut_menu[4] = glutCreateMenu(NULL);
1685 glutAddSubMenu("at the elbows?", glut_menu[6]);
1686
1687 glut_menu[7] = glutCreateMenu(NULL);
1688 glutAddSubMenu("at the hip? ", glut_menu[8]);
1689 glutAddSubMenu("at the knees?", glut_menu[9]);
1690 glutAddSubMenu("at the ankles? ", glut_menu[10]);
1691
1692 printf("turn left : d\n");
1693 printf("turn right : g\n");
1694
1695 glut_menu[3] = glutCreateMenu(null_select);
1696 printf("tilt backwards : f\n");
1697 printf("tilt forwards : r\n");
1698
1699 glut_menu[0] = glutCreateMenu(NULL);
1700 glutAddSubMenu("move the arms.. ", glut_menu[4]);
1701 glutAddSubMenu("fire the vulcan guns?", glut_menu[1]);
1702 glutAddSubMenu("move the legs.. ", glut_menu[7]);
1703 glutAddSubMenu("move the torso?", glut_menu[2]);
1704 glutAddSubMenu("move the hip?", glut_menu[3]);
1705 glutAddSubMenu("rotate the scene..", glut_menu[11]);
1706#ifdef MOVE_LIGHT
1707 glutAddSubMenu("rotate the light source..", glut_menu[12]);
1708#endif
1709
1710 glutCreateMenu(menu_select);
1711#ifdef ANIMATION
1712 printf("Start Walk", 1);
1713 printf("Stop Walk", 2);
1714#endif
1715 printf("Toggle Wireframe", 3);
1716 glutAddSubMenu("How do I ..", glut_menu[0]);
1717 printfy("Quit", 4);
1718 glutAttachMenu(GLUT_LEFT_BUTTON);
1719 glutAttachMenu(GLUT_RIGHT_BUTTON);
1720#endif
1721}
1722
1723void idle( void )
1724{
1725 /* animate the mech */
1726
1727 animation();
1728
1729 /* draw the Mech */
1730
1731 display();
1732}
1733
1734/* #define PROFILE */
1735
1736#ifdef PROFILE
1737extern int count_triangles;
1738#endif
1739
1740// #define LINUX_TEST_FLOAT
1741
1742#ifdef LINUX_TEST_FLOAT
1743#include <fpu_control.h>
1744#endif
1745
1746int
1747main(int argc, char **argv)
1748{
1749#ifdef LINUX_TEST_FLOAT
1750 /* for debuging floating point errors under Linux */
1751 __setfpucw ( 0x1372 );
1752#endif
1753
1754 Toggle();
1755
1756 return ui_loop(argc, argv, "mech");
1757}
1758
1759void draw() {}
void glColor3f(float x, float y, float z)
Definition: api.c:92
void glVertex3f(float x, float y, float z)
Definition: api.c:23
void glNormal3f(float x, float y, float z)
Definition: api.c:35
@ GL_NORMALIZE
Definition: gl.h:191
@ GL_FRONT_AND_BACK
Definition: gl.h:184
@ GL_LINE
Definition: gl.h:115
@ GL_COMPILE
Definition: gl.h:134
@ GL_LIGHT0
Definition: gl.h:159
@ GL_SPOT_CUTOFF
Definition: gl.h:168
@ GL_AMBIENT
Definition: gl.h:172
@ GL_SHININESS
Definition: gl.h:175
@ GL_DEPTH_TEST
Definition: gl.h:149
@ GL_PROJECTION
Definition: gl.h:95
@ GL_POSITION
Definition: gl.h:177
@ GL_QUADS
Definition: gl.h:39
@ GL_SPECULAR
Definition: gl.h:174
@ GL_LIGHTING
Definition: gl.h:158
@ GL_MODELVIEW
Definition: gl.h:94
@ GL_FILL
Definition: gl.h:116
@ GL_LINE_LOOP
Definition: gl.h:35
@ GL_FRONT
Definition: gl.h:119
@ GL_TRIANGLES
Definition: gl.h:36
@ GL_DIFFUSE
Definition: gl.h:173
int GLenum
Definition: gl.h:662
void glPushMatrix(void)
Definition: api.c:285
void glPopMatrix(void)
Definition: api.c:294
void glCallList(unsigned int list)
Definition: api.c:635
void glEndList(void)
Definition: list.c:210
float GLfloat
Definition: gl.h:671
void glClearColor(float r, float g, float b, float a)
Definition: api.c:481
void glViewport(int x, int y, int width, int height)
Definition: api.c:341
int GLint
Definition: gl.h:667
void glClear(int mask)
Definition: api.c:471
void glNewList(unsigned int list, int mode)
Definition: list.c:191
void glMatrixMode(int mode)
Definition: api.c:244
void glLightf(int light, int type, float v)
Definition: api.c:430
void glPolygonMode(int face, int mode)
Definition: api.c:180
void glLightfv(int light, int type, float *v)
Definition: api.c:415
void glFlush(void)
Definition: api.c:645
void glMaterialfv(int mode, int type, float *v)
Definition: api.c:372
void glRotatef(float angle, float x, float y, float z)
Definition: api.c:303
void glBegin(int type)
Definition: api.c:223
void glTranslatef(float x, float y, float z)
Definition: api.c:316
void glLoadIdentity(void)
Definition: api.c:265
void glEnable(int code)
Definition: api.c:199
void glScalef(float x, float y, float z)
Definition: api.c:328
void glDisable(int code)
Definition: api.c:210
@ GL_COLOR_BUFFER_BIT
Definition: gl.h:651
@ GL_DEPTH_BUFFER_BIT
Definition: gl.h:645
void glEnd(void)
Definition: api.c:233
void gluQuadricDrawStyle(GLUquadricObj *obj, int style)
Definition: glu.c:71
void gluPerspective(GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar)
Definition: glu.c:52
void gluDisk(GLUquadricObj *qobj, GLdouble innerRadius, GLdouble outerRadius, GLint slices, GLint loops)
Definition: glu.c:130
void gluSphere(GLUquadricObj *qobj, float radius, int slices, int stacks)
Definition: glu.c:173
void gluCylinder(GLUquadricObj *qobj, GLdouble baseRadius, GLdouble topRadius, GLdouble height, GLint slices, GLint stacks)
Definition: glu.c:75
GLUquadricObj * gluNewQuadric(void)
Definition: glu.c:66
#define GLU_LINE
Definition: glu.h:9
#define LIGHT_TURN_RATE
Definition: mech.c:98
void Foot(char solid)
Definition: mech.c:860
void idle(void)
Definition: mech.c:1723
void RaiseLeg1Forward(void)
Definition: mech.c:345
void Ankle2Add(void)
Definition: mech.c:207
float distance
Definition: mech.c:114
GLfloat mat_specular5[]
Definition: mech.c:157
#define UPPER_LEG_RATE
Definition: mech.c:96
void lat1Raise(void)
Definition: mech.c:315
#define SOLID_MECH_TORSO
Definition: mech.c:75
void TurnForwards(void)
Definition: mech.c:408
void Heel2Add(void)
Definition: mech.c:183
void elbow1Subtract(void)
Definition: mech.c:249
void lat2Raise(void)
Definition: mech.c:327
GLfloat mat_ambient5[]
Definition: mech.c:159
int shoulder1
Definition: mech.c:109
GLfloat mat_shininess3[]
Definition: mech.c:145
void RaiseLeg2Outwards(void)
Definition: mech.c:381
void MechHip(char solid)
Definition: mech.c:604
GLfloat mat_diffuse5[]
Definition: mech.c:161
float elevation
Definition: mech.c:114
int lightturn
Definition: mech.c:112
#define SOLID_MECH_VULCAN
Definition: mech.c:83
void LowerLeg1Backwards(void)
Definition: mech.c:351
#define CANNON_RATE
Definition: mech.c:95
void init(void)
Definition: mech.c:1252
void lat1Lower(void)
Definition: mech.c:321
int shoulder3
Definition: mech.c:109
#define SOLID_MECH_UPPER_LEG
Definition: mech.c:80
#define LAT_RATE
Definition: mech.c:94
void LightTurnLeft(void)
Definition: mech.c:426
void ForeArm(char solid)
Definition: mech.c:772
#define ELBOW_RATE
Definition: mech.c:92
void MechTorso(char solid)
Definition: mech.c:583
GLfloat mat_diffuse[]
Definition: mech.c:125
int lat1
Definition: mech.c:109
GLfloat mat_ambient3[]
Definition: mech.c:141
void RaiseLeg1Outwards(void)
Definition: mech.c:357
void Ankle1Add(void)
Definition: mech.c:195
int main(int argc, char **argv)
Definition: mech.c:1747
GLfloat mat_ambient4[]
Definition: mech.c:150
#define SOLID_MECH_FOREARM
Definition: mech.c:79
void Heel1Add(void)
Definition: mech.c:171
void shoulder3Subtract(void)
Definition: mech.c:297
int shoulder2
Definition: mech.c:109
GLfloat mat_specular2[]
Definition: mech.c:130
GLfloat mat_shininess2[]
Definition: mech.c:136
#define VIEW_TURN_RATE
Definition: mech.c:99
void LowerLeg(char solid)
Definition: mech.c:875
void RotateAdd(void)
Definition: mech.c:219
void display(void)
Definition: mech.c:1213
void lighting(void)
Definition: mech.c:1076
GLfloat mat_specular[]
Definition: mech.c:121
void FireCannon(void)
Definition: mech.c:339
#define ANKLE_RATE
Definition: mech.c:88
int heel2
Definition: mech.c:111
void Box(float width, float height, float depth, char solid)
Definition: mech.c:447
void draw()
Definition: mech.c:1759
int elbow1
Definition: mech.c:110
#define PI
Definition: mech.c:104
void animation_walk(void)
Definition: mech.c:1286
void shoulder2Add(void)
Definition: mech.c:279
#define SHOULDER_RATE
Definition: mech.c:93
#define SOLID_MECH_ROCKET
Definition: mech.c:82
int anim
Definition: mech.c:112
int elbow2
Definition: mech.c:110
void DrawMech(void)
Definition: mech.c:1105
#define SOLID_MECH_FOOT
Definition: mech.c:81
void TurnLeft(void)
Definition: mech.c:402
int hip11
Definition: mech.c:111
void LowerLeg1Inwards(void)
Definition: mech.c:363
GLenum key(int key, GLenum mask)
Definition: mech.c:1390
void Enviro(char solid)
Definition: mech.c:1027
void Heel2Subtract(void)
Definition: mech.c:189
void elbow2Subtract(void)
Definition: mech.c:261
int turn1
Definition: mech.c:112
void Octagon(float side, float height, char solid)
Definition: mech.c:507
void shoulder1Add(void)
Definition: mech.c:267
void shoulder2Subtract(void)
Definition: mech.c:285
int shoulder4
Definition: mech.c:109
void RaiseLeg2Forward(void)
Definition: mech.c:369
void shoulder1Subtract(void)
Definition: mech.c:273
#define ROTATE_RATE
Definition: mech.c:90
void LightBackwards(void)
Definition: mech.c:438
void shoulder3Add(void)
Definition: mech.c:291
int hip12
Definition: mech.c:111
void lat2Lower(void)
Definition: mech.c:333
int lat2
Definition: mech.c:109
void SetMaterial(GLfloat spec[], GLfloat amb[], GLfloat diff[], GLfloat shin[])
Definition: mech.c:573
#define SOLID_ENVIRO
Definition: mech.c:84
void Ankle2Subtract(void)
Definition: mech.c:213
void shoulder4Subtract(void)
Definition: mech.c:309
int pivot
Definition: mech.c:110
void disable(void)
Definition: mech.c:1067
GLfloat mat_ambient[]
Definition: mech.c:123
void TurnBackwards(void)
Definition: mech.c:414
GLfloat mat_ambient2[]
Definition: mech.c:132
int turn
Definition: mech.c:112
int ankle1
Definition: mech.c:110
void LightForwards(void)
Definition: mech.c:432
void VulcanGun(char solid)
Definition: mech.c:718
#define SOLID_MECH_UPPER_ARM
Definition: mech.c:78
void LightTurnRight(void)
Definition: mech.c:420
void MechTiltAdd(void)
Definition: mech.c:237
void RocketPod(char solid)
Definition: mech.c:971
void shoulder4Add(void)
Definition: mech.c:303
int ankle2
Definition: mech.c:110
GLfloat mat_specular4[]
Definition: mech.c:148
void UpperLeg(char solid)
Definition: mech.c:794
void Ankle1Subtract(void)
Definition: mech.c:201
int hip21
Definition: mech.c:111
void LowerLeg2Backwards(void)
Definition: mech.c:375
int tilt
Definition: mech.c:110
void MechTiltSubtract(void)
Definition: mech.c:231
void reshape(int w, int h)
Definition: mech.c:1273
void elbow2Add(void)
Definition: mech.c:255
#define TILT_RATE
Definition: mech.c:91
GLfloat mat_specular3[]
Definition: mech.c:139
int heel1
Definition: mech.c:110
GLfloat mat_shininess5[]
Definition: mech.c:163
void elbow1Add(void)
Definition: mech.c:243
void Shoulder(char solid)
Definition: mech.c:636
GLfloat mat_diffuse3[]
Definition: mech.c:143
#define HEEL_RATE
Definition: mech.c:89
GLfloat mat_shininess4[]
Definition: mech.c:154
float frame
Definition: mech.c:114
void LowerLeg2Inwards(void)
Definition: mech.c:387
int hip22
Definition: mech.c:111
GLfloat mat_shininess[]
Definition: mech.c:127
void printHelp(void)
Definition: mech.c:1637
void UpperArm(char solid)
Definition: mech.c:661
#define SOLID_MECH_SHOULDER
Definition: mech.c:77
int lightturn1
Definition: mech.c:112
char leg
Definition: mech.c:107
void TurnRight(void)
Definition: mech.c:396
void RotateSubtract(void)
Definition: mech.c:225
void Toggle(void)
Definition: mech.c:1058
#define UPPER_LEG_RATE_GROIN
Definition: mech.c:97
GLfloat mat_diffuse4[]
Definition: mech.c:152
void Heel1Subtract(void)
Definition: mech.c:177
int fire
Definition: mech.c:111
GLfloat mat_diffuse2[]
Definition: mech.c:134
int solid_part
Definition: mech.c:111
void animation(void)
Definition: mech.c:1383
#define SOLID_MECH_HIP
Definition: mech.c:76
int ui_loop(int argc, char **argv, const char *name)
Definition: mingw32.c:310
void tkSwapBuffers(void)
Definition: mingw32.c:305
#define KEY_RIGHT
Definition: ui.h:15
#define KEY_DOWN
Definition: ui.h:13
#define KEY_LEFT
Definition: ui.h:14
#define KEY_UP
Definition: ui.h:12