models.c
上传用户:xk288cn
上传日期:2007-05-28
资源大小:4876k
文件大小:18k
源码类别:

GIS编程

开发平台:

Visual C++

  1. #include <GL/glut.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <math.h>
  5. #include "walker.h"
  6.   /* for cube models */
  7. #define UPPER_LEG_SIZE_C 0.45
  8. #define LOWER_LEG_SIZE_C 0.45
  9. #define UPPER_ARM_SIZE_C 0.4
  10. #define LOWER_ARM_SIZE_C 0.4
  11. #define FOOT_SIZE_C 0.2
  12. #define HEAD_SIZE_C 0.25
  13. #define TORSO_HEIGHT_C 0.8
  14. #define TORSO_WIDTH_C 0.5
  15. #define LEG_GIRTH_C 0.1
  16. #define ARM_GIRTH_C 0.05
  17.   /* for cylinder models */
  18. #define UPPER_LEG_SIZE 0.5
  19. #define LOWER_LEG_SIZE 0.5
  20. #define LEG_GIRTH 0.08
  21. #define UPPER_LEG_GIRTH 0.1
  22. #define UPPER_LEG_TAPER 0.8
  23. #define LOWER_LEG_TAPER 0.8
  24. #define LOWER_LEG_GIRTH 0.07
  25. #define UPPER_ARM_SIZE 0.45
  26. #define LOWER_ARM_SIZE 0.45
  27. #define ARM_GIRTH 0.05
  28. #define UPPER_ARM_GIRTH 0.05
  29. #define LOWER_ARM_GIRTH 0.04
  30. #define UPPER_ARM_TAPER 0.8
  31. #define LOWER_ARM_TAPER 0.8
  32. #define HIP_JOINT_SIZE 0.1
  33. #define KNEE_JOINT_SIZE 0.09
  34. #define SHOULDER_JOINT_SIZE 0.05
  35. #define ELBOW_JOINT_SIZE 0.045
  36. #define HEAD_SIZE 0.2
  37. #define FOOT_SIZE 0.15
  38. #define TORSO_HEIGHT 0.8
  39. #define TORSO_WIDTH 0.35
  40. #define TORSO_TAPER 0.7
  41. #define STACKS 10
  42. #define SLICES 10
  43. #define NUM_BODY_PARTS 7
  44. #define LEFT 0
  45. #define RIGHT 1
  46. #define SOLID 1
  47. #define WIRE 0
  48. void DrawTheGuy_WC(void);
  49. void DrawTheGuy_SC(void);
  50. void draw_head_C(int solid);
  51. void draw_torso_C(int solid);
  52. void draw_leg_C(int which, int solid);
  53. void draw_arm_C(int which, int solid);
  54. void StoreTheGuy_SL(void);
  55. void DrawTheGuy_SL(void);
  56. void draw_head_SL(void);
  57. void draw_torso_SL(void);
  58. void draw_leg_SL(int which);
  59. void draw_arm_SL(int which);
  60. void store_head_SL(void);
  61. void store_torso_SL(void);
  62. void store_uleg_SL(void);
  63. void store_lleg_SL(void);
  64. void store_foot_SL(void);
  65. void store_uarm_SL(void);
  66. void store_larm_SL(void);
  67. void StoreTheGuy_SL2(void);
  68. void DrawTheGuy_SL2(void);
  69. void draw_head_SL2(void);
  70. void draw_torso_SL2(void);
  71. void draw_leg_SL2(int which);
  72. void draw_arm_SL2(int which);
  73. void store_head_SL2(void);
  74. void store_torso_SL2(void);
  75. void store_uleg_SL2(void);
  76. void store_lleg_SL2(void);
  77. void store_foot_SL2(void);
  78. void store_uarm_SL2(void);
  79. void store_larm_SL2(void);
  80. /**************************************************************/
  81. void DrawTheGuy_WC(void)
  82. {
  83.   draw_head_C(WIRE);
  84.   draw_torso_C(WIRE);
  85.   draw_leg_C(LEFT,  WIRE);
  86.   draw_leg_C(RIGHT, WIRE);
  87.   draw_arm_C(LEFT,  WIRE);
  88.   draw_arm_C(RIGHT, WIRE);
  89. }
  90. /**************************************************************/
  91. void DrawTheGuy_SC(void)
  92. {
  93.   GLfloat head_diffuse[] = { 0.7, 0.7, 0.0, 1.0 };
  94.   GLfloat torso_diffuse[] = { 0.0, 0.7, 0.7, 1.0 };
  95.   GLfloat leg_diffuse[] = { 0.7, 0.0, 0.7, 1.0 };
  96.   GLfloat arm_diffuse[] = { 0.7, 0.4, 0.4, 1.0 };
  97.   glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, head_diffuse);
  98.   draw_head_C(SOLID);
  99.   glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, torso_diffuse);
  100.   draw_torso_C(SOLID);
  101.   glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, leg_diffuse);
  102.   draw_leg_C(LEFT,  SOLID);
  103.   draw_leg_C(RIGHT, SOLID);
  104.   glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, arm_diffuse);
  105.   draw_arm_C(LEFT,  SOLID);
  106.   draw_arm_C(RIGHT, SOLID);
  107. }
  108. /**********************************************************/
  109. void draw_head_C(int solid)
  110. {
  111.   glPushMatrix();
  112.   glColor3f(1.0, 1.0, 0.0);
  113.   glTranslatef(0.0, TORSO_HEIGHT_C+(HEAD_SIZE_C/1.5), 0.0);
  114.   glScalef(HEAD_SIZE_C, HEAD_SIZE_C, LEG_GIRTH_C);
  115.   if (solid)
  116.     glutSolidCube(1.0);
  117.   else
  118.     glutWireCube(1.0);
  119.   glPopMatrix();
  120. }
  121. /**********************************************************/
  122. void draw_torso_C(int solid)
  123. {
  124.   glPushMatrix();
  125.   glColor3f(0.0, 1.0, 1.0);
  126.   glTranslatef(0.0, TORSO_HEIGHT_C/2.0, 0.0);
  127.   glScalef(TORSO_WIDTH_C, TORSO_HEIGHT_C, LEG_GIRTH_C);
  128.   if (solid)
  129.     glutSolidCube(1.0);
  130.   else
  131.     glutWireCube(1.0);
  132.   glPopMatrix();
  133. }
  134. /**********************************************************/
  135. void draw_leg_C(int which, int solid)
  136. {
  137.   glPushMatrix();
  138.   if (which == 0)
  139.     glTranslatef(TORSO_WIDTH_C/4.0, 0.0, 0.0);
  140.   else glTranslatef(-TORSO_WIDTH_C/4.0, 0.0, 0.0);
  141.   /* Upper leg: rotates about the x axis only */
  142.   glColor3f(1.0, 0.0, 0.0);
  143.   glRotatef(Walk_cycle[which][0][Step],1.0, 0.0, 0.0);
  144.   glPushMatrix();
  145.   glTranslatef(0.0, -UPPER_LEG_SIZE_C/2.0, 0.0);
  146.   glScalef(LEG_GIRTH_C, UPPER_LEG_SIZE_C, LEG_GIRTH_C);
  147.   if (solid)
  148.     glutSolidCube(1.0);
  149.   else
  150.     glutWireCube(1.0);
  151.   glPopMatrix();
  152.   /* Lower leg: rotates about the x axis only */
  153.   glColor3f(0.0, 1.0, 0.0);
  154.   glTranslatef(0.0, -(UPPER_LEG_SIZE_C+LOWER_LEG_SIZE_C)/2.0, 0.0);
  155.   glRotatef(Walk_cycle[which][1][Step], 1.0, 0.0, 0.0);
  156.   glPushMatrix();
  157.   glTranslatef(0.0, -LOWER_LEG_SIZE_C/2.0, 0.0);
  158.   glScalef(LEG_GIRTH_C, LOWER_LEG_SIZE_C, LEG_GIRTH_C);
  159.   if (solid)
  160.     glutSolidCube(1.0);
  161.   else
  162.     glutWireCube(1.0);
  163.   glPopMatrix();
  164.   /* Foot: rotates about the x axis only */
  165.   glColor3f(0.0, 0.0, 1.0);
  166.   glTranslatef(0.0, -(UPPER_LEG_SIZE_C+LOWER_LEG_SIZE_C+LEG_GIRTH_C)/2.0, 0.0);
  167.   glRotatef(Walk_cycle[which][2][Step], 1.0, 0.0, 0.0);
  168.   glPushMatrix();
  169.   glTranslatef(0.0, -LEG_GIRTH_C/2.0, -FOOT_SIZE_C/4.0);
  170.   glScalef(LEG_GIRTH_C, LEG_GIRTH_C, FOOT_SIZE_C);
  171.   if (solid)
  172.     glutSolidCube(1.0);
  173.   else
  174.     glutWireCube(1.0);
  175.   glPopMatrix();
  176.   glPopMatrix();
  177. }
  178.  
  179. /*********************************************************************/
  180. void draw_arm_C(int which, int solid)
  181. {
  182.   int arm_which;
  183.   if (which == 1)
  184.     arm_which = 1;
  185.   else arm_which = 0;
  186.   glPushMatrix();
  187.   glTranslatef(0.0, TORSO_HEIGHT_C, 0.0);
  188.   if (which == 0)
  189.     glTranslatef(TORSO_WIDTH_C/1.5, 0.0, 0.0);
  190.   else glTranslatef(-TORSO_WIDTH_C/1.5, 0.0, 0.0);
  191.   /* Upper leg: rotates about the x axis only */
  192.   glColor3f(1.0, 0.0, 0.0);
  193.   glRotatef(Walk_cycle[arm_which][3][Step],1.0, 0.0, 0.0);
  194.   glPushMatrix();
  195.   glTranslatef(0.0, -UPPER_ARM_SIZE_C/2.0, 0.0);
  196.   glScalef(ARM_GIRTH_C, UPPER_ARM_SIZE_C, ARM_GIRTH_C);
  197.   if (solid)
  198.     glutSolidCube(1.0);
  199.   else
  200.     glutWireCube(1.0);
  201.   glPopMatrix();
  202.   /* Lower leg: rotates about the x axis only */
  203.   glColor3f(0.0, 1.0, 0.0);
  204.   glTranslatef(0.0, -(UPPER_ARM_SIZE_C+LOWER_ARM_SIZE_C)/2.0, 0.0);
  205.   glRotatef(Walk_cycle[arm_which][4][Step], 1.0, 0.0, 0.0);
  206.   glPushMatrix();
  207.   glTranslatef(0.0, -LOWER_ARM_SIZE_C/2.0, 0.0);
  208.   glScalef(ARM_GIRTH_C, LOWER_ARM_SIZE_C, ARM_GIRTH_C);
  209.   if (solid)
  210.     glutSolidCube(1.0);
  211.   else
  212.     glutWireCube(1.0);
  213.   glPopMatrix();
  214.   glPopMatrix();
  215. }
  216. GLUquadricObj *quadObj;
  217. GLuint body_lists;
  218. /**************************************************************/
  219. void StoreTheGuy_SL(void)
  220. {
  221.   quadObj = gluNewQuadric();
  222.   body_lists = glGenLists(NUM_BODY_PARTS);
  223.   glNewList(body_lists, GL_COMPILE);
  224.   store_head_SL();
  225.   glEndList();
  226.   glNewList(body_lists+1, GL_COMPILE);
  227.   store_torso_SL();
  228.   glEndList();
  229.   glNewList(body_lists+2, GL_COMPILE);
  230.   store_uleg_SL();
  231.   glEndList();
  232.   glNewList(body_lists+3, GL_COMPILE);
  233.   store_lleg_SL();
  234.   glEndList();
  235.   glNewList(body_lists+4, GL_COMPILE);
  236.   store_foot_SL();
  237.   glEndList();
  238.   glNewList(body_lists+5, GL_COMPILE);
  239.   store_uarm_SL();
  240.   glEndList();
  241.   glNewList(body_lists+6, GL_COMPILE);
  242.   store_larm_SL();
  243.   glEndList();
  244. }
  245. /**********************************************************/
  246. void store_head_SL(void)
  247.   glPushMatrix();
  248.   glTranslatef(0.0, TORSO_HEIGHT+HEAD_SIZE, 0.0);
  249.   glScalef(HEAD_SIZE, HEAD_SIZE, LEG_GIRTH);
  250.   glutSolidSphere(1.0, SLICES, STACKS);
  251.   glPopMatrix();
  252. }
  253. /**********************************************************/
  254. void store_torso_SL(void)
  255. {
  256.   glPushMatrix();
  257.   glScalef(TORSO_WIDTH, TORSO_HEIGHT, LEG_GIRTH);
  258.   glRotatef(-90.0, 1.0, 0.0, 0.0);
  259.   gluCylinder(quadObj, TORSO_TAPER, 1.0, 1.0, SLICES, STACKS);
  260.   glPopMatrix();
  261. }
  262. /**************************************************************/
  263. void store_uleg_SL(void)
  264. {
  265.   glPushMatrix();
  266.   glScalef(LEG_GIRTH, UPPER_LEG_SIZE, LEG_GIRTH);
  267.   glRotatef(90.0, 1.0, 0.0, 0.0);
  268.   gluCylinder(quadObj, 1.0, 1.0, 1.0, SLICES, STACKS);
  269.   glPopMatrix();
  270. }
  271.   
  272. /**************************************************************/
  273. void store_lleg_SL(void)
  274. {
  275.   glPushMatrix();
  276.   glScalef(LEG_GIRTH, LOWER_LEG_SIZE, LEG_GIRTH);
  277.   glRotatef(90.0, 1.0, 0.0, 0.0);
  278.   gluCylinder(quadObj, 1.0, 1.0, 1.0, SLICES, STACKS);
  279.   glPopMatrix();
  280. }
  281.   
  282. /**************************************************************/
  283. void store_foot_SL(void)
  284. {
  285.   glPushMatrix();
  286.   glTranslatef(0.0, 0.0, -FOOT_SIZE/2.0);
  287.   glScalef(LEG_GIRTH, LEG_GIRTH, FOOT_SIZE);
  288.   glRotatef(90.0, 1.0, 0.0, 0.0);
  289.   gluCylinder(quadObj, 1.0, 1.0, 1.0, SLICES, STACKS);
  290.   glPopMatrix();
  291. }
  292.   
  293. /**************************************************************/
  294. void store_uarm_SL(void)
  295. {
  296.   glPushMatrix();
  297.   glScalef(ARM_GIRTH, UPPER_ARM_SIZE, ARM_GIRTH);
  298.   glRotatef(90.0, 1.0, 0.0, 0.0);
  299.   gluCylinder(quadObj, 1.0, 1.0, 1.0, SLICES, STACKS);
  300.   glPopMatrix();
  301. }
  302.   
  303. /**************************************************************/
  304. void store_larm_SL(void)
  305. {
  306.   glPushMatrix();
  307.   glScalef(ARM_GIRTH, LOWER_ARM_SIZE, ARM_GIRTH);
  308.   glRotatef(90.0, 1.0, 0.0, 0.0);
  309.   gluCylinder(quadObj, 1.0, 1.0, 1.0, SLICES, STACKS);
  310.   glPopMatrix();
  311. }
  312.   
  313. /**************************************************************/
  314. void DrawTheGuy_SL(void)
  315. {
  316.   GLfloat head_diffuse[] =  { 0.7, 0.7, 0.0, 1.0 };
  317.   GLfloat torso_diffuse[] = { 0.0, 0.7, 0.7, 1.0 };
  318.   GLfloat leg_diffuse[] =   { 0.7, 0.0, 0.7, 1.0 };
  319.   GLfloat arm_diffuse[] =   { 0.7, 0.4, 0.4, 1.0 };
  320.   glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, head_diffuse);
  321.   draw_head_SL();
  322.   glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, torso_diffuse);
  323.   draw_torso_SL();
  324.   glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, leg_diffuse);
  325.   draw_leg_SL(0);
  326.   draw_leg_SL(1);
  327.   glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, arm_diffuse);
  328.   draw_arm_SL(0);
  329.   draw_arm_SL(1);
  330. }
  331. /**********************************************************/
  332. void draw_head_SL(void)
  333. {
  334.   glPushMatrix();
  335.   glCallList(body_lists);
  336.   glPopMatrix();
  337. }
  338. /**********************************************************/
  339. void draw_torso_SL(void)
  340. {
  341.   glPushMatrix();
  342.   glCallList(body_lists+1);
  343.   glPopMatrix();
  344. }
  345. /**********************************************************/
  346. void draw_leg_SL(int which)
  347. {
  348.   glPushMatrix();
  349.   if (which == 0)
  350.     glTranslatef(TORSO_TAPER*TORSO_WIDTH/2.0, 0.0, 0.0);
  351.   else glTranslatef(-TORSO_TAPER*TORSO_WIDTH/2.0, 0.0, 0.0);
  352.   /* Upper leg: rotates about the x axis only */
  353.   glRotatef(Walk_cycle[which][0][Step],1.0, 0.0, 0.0);
  354.   glPushMatrix();
  355.   glCallList(body_lists+2);
  356.   glPopMatrix();
  357.   /* Lower leg: rotates about the x axis only */
  358.   glTranslatef(0.0, -(UPPER_LEG_SIZE+LOWER_LEG_SIZE)/2.0, 0.0);
  359.   glRotatef(Walk_cycle[which][1][Step], 1.0, 0.0, 0.0);
  360.   glPushMatrix();
  361.   glCallList(body_lists+3);
  362.   glPopMatrix();
  363.   /* Foot: rotates about the x axis only */
  364.   glTranslatef(0.0, -(UPPER_LEG_SIZE+LOWER_LEG_SIZE+LEG_GIRTH)/2.0, 0.0);
  365.   glRotatef(Walk_cycle[which][2][Step], 1.0, 0.0, 0.0);
  366.   glPushMatrix();
  367.   glCallList(body_lists+4);
  368.   glPopMatrix();
  369.   glPopMatrix();
  370. }
  371.  
  372. /*********************************************************************/
  373. void draw_arm_SL(int which)
  374. {
  375.   int arm_which;
  376.   if (which == 1)
  377.     arm_which = 1;
  378.   else arm_which = 0;
  379.   glPushMatrix();
  380.   glTranslatef(0.0, TORSO_HEIGHT, 0.0);
  381.   if (which == 0)
  382.     glTranslatef(TORSO_WIDTH, 0.0, 0.0);
  383.   else glTranslatef(-TORSO_WIDTH, 0.0, 0.0);
  384.   /* Upper leg: rotates about the x axis only */
  385.   glRotatef(Walk_cycle[arm_which][3][Step],1.0, 0.0, 0.0);
  386.   glPushMatrix();
  387.   glCallList(body_lists+5);
  388.   glPopMatrix();
  389.   /* Lower leg: rotates about the x axis only */
  390.   glTranslatef(0.0, -(UPPER_ARM_SIZE+LOWER_ARM_SIZE)/2.0, 0.0);
  391.   glRotatef(Walk_cycle[arm_which][4][Step], 1.0, 0.0, 0.0);
  392.   glPushMatrix();
  393.   glCallList(body_lists+6);
  394.   glPopMatrix();
  395.   glPopMatrix();
  396. }
  397.  
  398. GLUquadricObj *quadObj2;
  399. GLuint body_lists2;
  400. /**************************************************************/
  401. void StoreTheGuy_SL2(void)
  402. {
  403.   quadObj2 = gluNewQuadric();
  404.   body_lists2 = glGenLists(NUM_BODY_PARTS);
  405.   glNewList(body_lists2, GL_COMPILE);
  406.   store_head_SL2();
  407.   glEndList();
  408.   glNewList(body_lists2+1, GL_COMPILE);
  409.   store_torso_SL2();
  410.   glEndList();
  411.   glNewList(body_lists2+2, GL_COMPILE);
  412.   store_uleg_SL2();
  413.   glEndList();
  414.   glNewList(body_lists2+3, GL_COMPILE);
  415.   store_lleg_SL2();
  416.   glEndList();
  417.   glNewList(body_lists2+4, GL_COMPILE);
  418.   store_foot_SL2();
  419.   glEndList();
  420.   glNewList(body_lists2+5, GL_COMPILE);
  421.   store_uarm_SL2();
  422.   glEndList();
  423.   glNewList(body_lists2+6, GL_COMPILE);
  424.   store_larm_SL2();
  425.   glEndList();
  426. }
  427. /**********************************************************/
  428. void store_head_SL2(void)
  429.   glPushMatrix();
  430.   glTranslatef(0.0, TORSO_HEIGHT+HEAD_SIZE, 0.0);
  431.   glScalef(HEAD_SIZE, HEAD_SIZE, UPPER_LEG_GIRTH);
  432.   glutSolidSphere(1.0, SLICES, STACKS);
  433.   glPopMatrix();
  434. }
  435. /**********************************************************/
  436. void store_torso_SL2(void)
  437. {
  438.   glPushMatrix();
  439.   glScalef(TORSO_WIDTH, TORSO_HEIGHT, UPPER_LEG_GIRTH);
  440.   glRotatef(-90.0, 1.0, 0.0, 0.0);
  441.   gluCylinder(quadObj2, TORSO_TAPER, 1.0, 1.0, SLICES, STACKS);
  442.   glPopMatrix();
  443. }
  444. /**************************************************************/
  445. void store_uleg_SL2(void)
  446. {
  447.   glPushMatrix();
  448.   glTranslatef(0.0, -(HIP_JOINT_SIZE+UPPER_LEG_SIZE), 0.0);
  449.   glutSolidSphere(KNEE_JOINT_SIZE, SLICES, STACKS);
  450.   glPopMatrix();
  451.   glTranslatef(0.0, -HIP_JOINT_SIZE, 0.0);
  452.   glutSolidSphere(HIP_JOINT_SIZE, SLICES, STACKS);
  453.   glPushMatrix();
  454.   glScalef(UPPER_LEG_GIRTH, UPPER_LEG_SIZE, UPPER_LEG_GIRTH);
  455.   glRotatef(90.0, 1.0, 0.0, 0.0);
  456.   gluCylinder(quadObj2, 1.0, UPPER_LEG_TAPER, 1.0, SLICES, STACKS);
  457.   glPopMatrix();
  458. }
  459.   
  460. /**************************************************************/
  461. void store_lleg_SL2(void)
  462. {
  463.   glPushMatrix();
  464.   glScalef(LOWER_LEG_GIRTH, LOWER_LEG_SIZE, LOWER_LEG_GIRTH);
  465.   glRotatef(90.0, 1.0, 0.0, 0.0);
  466.   gluCylinder(quadObj2, 1.0, LOWER_LEG_TAPER, 1.0, SLICES, STACKS);
  467.   glPopMatrix();
  468. }
  469.   
  470. /**************************************************************/
  471. void store_foot_SL2(void)
  472. {
  473.   glPushMatrix();
  474.   glTranslatef(0.0, 0.0, -FOOT_SIZE/2.0);
  475.   glScalef(LOWER_LEG_GIRTH, LOWER_LEG_GIRTH, FOOT_SIZE);
  476.   glRotatef(90.0, 1.0, 0.0, 0.0);
  477.   gluCylinder(quadObj2, 1.0, 1.0, 1.0, SLICES, STACKS);
  478.   glPopMatrix();
  479. }
  480.   
  481. /**************************************************************/
  482. void store_uarm_SL2(void)
  483. {
  484.   glPushMatrix();
  485.   glTranslatef(0.0, -(SHOULDER_JOINT_SIZE+UPPER_ARM_SIZE), 0.0);
  486.   glutSolidSphere(ELBOW_JOINT_SIZE, SLICES, STACKS);
  487.   glPopMatrix();
  488.   glTranslatef(0.0, -SHOULDER_JOINT_SIZE, 0.0);
  489.   glutSolidSphere(SHOULDER_JOINT_SIZE, SLICES, STACKS);
  490.   glPushMatrix();
  491.   glScalef(UPPER_ARM_GIRTH, UPPER_ARM_SIZE, UPPER_ARM_GIRTH);
  492.   glRotatef(90.0, 1.0, 0.0, 0.0);
  493.   gluCylinder(quadObj2, 1.0, UPPER_ARM_TAPER, 1.0, SLICES, STACKS);
  494.   glPopMatrix();
  495. }
  496.   
  497. /**************************************************************/
  498. void store_larm_SL2(void)
  499. {
  500.   glPushMatrix();
  501.   glScalef(LOWER_ARM_GIRTH, LOWER_ARM_SIZE, LOWER_ARM_GIRTH);
  502.   glRotatef(90.0, 1.0, 0.0, 0.0);
  503.   gluCylinder(quadObj2, 1.0, LOWER_ARM_TAPER, 1.0, SLICES, STACKS);
  504.   glPopMatrix();
  505. }
  506. /**************************************************************/
  507. void DrawTheGuy_SL2(void)
  508. {
  509.   GLfloat head_diffuse[] = { 0.7, 0.7, 0.0, 1.0 };
  510.   GLfloat torso_diffuse[] = { 0.0, 0.7, 0.7, 1.0 };
  511.   GLfloat leg_diffuse[] = { 0.7, 0.0, 0.7, 1.0 };
  512.   GLfloat arm_diffuse[] = { 0.7, 0.4, 0.4, 1.0 };
  513.   glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, head_diffuse);
  514.   draw_head_SL2();
  515.   glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, torso_diffuse);
  516.   draw_torso_SL2();
  517.   glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, leg_diffuse);
  518.   draw_leg_SL2(0);
  519.   draw_leg_SL2(1);
  520.   glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, arm_diffuse);
  521.   draw_arm_SL2(0);
  522.   draw_arm_SL2(1);
  523.  
  524. }
  525. /**********************************************************/
  526. void draw_head_SL2(void)
  527. {
  528.   glPushMatrix();
  529.   glCallList(body_lists2);
  530.   glPopMatrix();
  531. }
  532. /**********************************************************/
  533. void draw_torso_SL2(void)
  534. {
  535.   glPushMatrix();
  536.   glCallList(body_lists2+1);
  537.   glPopMatrix();
  538. }
  539. /**********************************************************/
  540. void draw_leg_SL2(int which)
  541. {
  542.   glPushMatrix();
  543.   if (which == 0)
  544.     glTranslatef(TORSO_TAPER*TORSO_WIDTH/2.0, 0.0, 0.0);
  545.   else glTranslatef(-TORSO_TAPER*TORSO_WIDTH/2.0, 0.0, 0.0);
  546.   /* UPPER leg: rotates about the x axis only */
  547.   glRotatef(Walk_cycle[which][0][Step],1.0, 0.0, 0.0);
  548.   glPushMatrix();
  549.   glCallList(body_lists2+2);
  550.   glPopMatrix();
  551.   /* LOWER leg: rotates about the x axis only */
  552.   glTranslatef(0.0, -(UPPER_LEG_SIZE+KNEE_JOINT_SIZE), 0.0);
  553.   glRotatef(Walk_cycle[which][1][Step], 1.0, 0.0, 0.0);
  554.   glPushMatrix();
  555.   glCallList(body_lists2+3);
  556.   glPopMatrix();
  557.   /* Foot: rotates about the x axis only */
  558.   glTranslatef(0.0, -(UPPER_LEG_SIZE+LOWER_LEG_SIZE+LOWER_LEG_GIRTH)/2.0, 0.0);
  559.   glRotatef(Walk_cycle[which][2][Step], 1.0, 0.0, 0.0);
  560.   glPushMatrix();
  561.   glCallList(body_lists2+4);
  562.   glPopMatrix();
  563.   glPopMatrix();
  564. }
  565.  
  566. /*********************************************************************/
  567. void draw_arm_SL2(int which)
  568. {
  569.   int arm_which;
  570.   if (which == 1)
  571.     arm_which = 1;
  572.   else arm_which = 0;
  573.   glPushMatrix();
  574.   glTranslatef(0.0, TORSO_HEIGHT, 0.0);
  575.   if (which == 0)
  576.     glTranslatef(TORSO_WIDTH, 0.0, 0.0);
  577.   else glTranslatef(-TORSO_WIDTH, 0.0, 0.0);
  578.   /* UPPER leg: rotates about the x axis only */
  579.   glRotatef(Walk_cycle[arm_which][3][Step],1.0, 0.0, 0.0);
  580.   glPushMatrix();
  581.   glCallList(body_lists2+5);
  582.   glPopMatrix();
  583.   /* LOWER leg: rotates about the x axis only */
  584.   glTranslatef(0.0, -(UPPER_ARM_SIZE+ELBOW_JOINT_SIZE), 0.0);
  585.   glRotatef(Walk_cycle[arm_which][4][Step], 1.0, 0.0, 0.0);
  586.   glPushMatrix();
  587.   glCallList(body_lists2+6);
  588.   glPopMatrix();
  589.   glPopMatrix();
  590. }
  591.