Ogl.cpp
上传用户:sz83729876
上传日期:2013-03-07
资源大小:4140k
文件大小:18k
源码类别:

OpenGL

开发平台:

Windows_Unix

  1. #include "../../main.h"
  2. bool rotate_wire = false;
  3. int ResetIt = 0;
  4. ////////
  5. #ifndef M_PI
  6. #define M_PI 3.14159265359F
  7. #endif
  8. #define ACC 8
  9. #define ACC2 16
  10. #define ACC3 48
  11. #define ACC4 24
  12. #define THLD 0.6
  13. #define THLD2 0.8
  14. extern int angle,rotating;
  15. extern float progress;
  16. GLfloat TRANS[7][3];
  17. GLfloat ROTAXIS[7][3];
  18. GLfloat ROT[7];
  19. GLfloat char_El[ACC3+1][ACC][3];
  20. GLfloat normal_El[ACC3+1][ACC][3];
  21. GLfloat char_O[ACC4][ACC][3];
  22. GLfloat normal_O[ACC4][ACC][3];
  23. GLfloat char_P[ACC2][ACC][3];
  24. GLfloat normal_P[ACC2][ACC][3];
  25. GLfloat char_G[ACC4][ACC][3];
  26. GLfloat normal_G[ACC4][ACC][3];
  27. GLfloat accSIN[ACC],accCOS[ACC];
  28. GLfloat difmat4[4] = { 0.425F,0.570F,0.664F,1.0F };
  29. GLfloat difamb4[4] = { 0.425F,0.570F,0.664F,1.0F };
  30. GLfloat matspec4[4] = { 0.174F,0.174F,0.174F,1.0F };
  31. ///////
  32. GLfloat lightpos[4] = { 1.0F,1.0F,1.0F,0.0F };
  33. GLfloat lightamb[4] = { 0.3F,0.3F,0.3F,1.0F };
  34. GLfloat lightdif[4] = { 0.8F,0.8F,0.8F,1.0F };
  35. float speed=0,progress = 1;
  36. void SetCamera(void);
  37. namespace ogl
  38. {
  39. int rnd(int i) {
  40.   return rand()%i;
  41. }
  42. void groen_texture(void) {
  43.   glMaterialfv(GL_FRONT,GL_DIFFUSE,difmat4);
  44.   glMaterialfv(GL_FRONT,GL_AMBIENT,difamb4);
  45.   glMaterialfv(GL_FRONT,GL_SPECULAR,matspec4);
  46.   glMaterialf(GL_FRONT,GL_SHININESS,35.0);
  47. }
  48. void def_O(void) {
  49.   float a,s,c,ln;
  50.   int i,j,k,l,m,n;
  51.   float dx,dy;
  52.   float dx1,dx2,dy1,dy2,dz1,dz2;
  53.   GLfloat center_O[ACC4+4][3];
  54.   GLfloat width_O[ACC4+4];
  55.   for(i=0;i<ACC4;i++) {
  56.     a = 2.0*((float) i)*M_PI/ACC4;
  57.     s = 1+sin(a);
  58.     c = cos(a);
  59.     center_O[i][0] = c*3.8;
  60.     center_O[i][1] = s*3.8+(s<-1.01?-0.8:(s>1.01?0.8:0)) + 0.8;
  61.     center_O[i][2] = 0.0;
  62.     width_O[i] = 0.6F; }
  63.   for(i=0;i<ACC4;i++) {
  64.     j =(i+1)%ACC4;
  65.     k =(i+ACC4-1)%ACC4;
  66.     for(a=0;a<ACC;a++) {
  67.       c = cos(a*M_PI*2.0/ACC);
  68.       s = sin(a*M_PI*2.0/ACC);
  69.       dx = center_O[j][0] - center_O[k][0];
  70.       dy = center_O[j][1] - center_O[k][1];
  71.       ln = sqrt(dx*dx+dy*dy);
  72.       dx = dx/ln;
  73.       dy = dy/ln;
  74.       char_O[i][(int) a][0] = center_O[i][0] + width_O[i] * dy * c;
  75.       char_O[i][(int) a][1] = center_O[i][1] - width_O[i] * dx * c;
  76.       char_O[i][(int) a][2] =(s<-THLD?-THLD:(s>THLD?THLD:s)); } }
  77.   for(i=0;i<ACC;i++) {
  78.     j =(i+1)%ACC;
  79.     k =(i-1+ACC)%ACC;
  80.     for(l=0;l<ACC4;l++) {
  81.       m =(l+1)%ACC4;
  82.       n =(l+ACC4-1)%ACC4;
  83.       dx1 = char_O[m][i][0] - char_O[n][i][0];
  84.       dy1 = char_O[m][i][1] - char_O[n][i][1];
  85.       dz1 = char_O[m][i][2] - char_O[n][i][2];
  86.       dx2 = char_O[l][k][0] - char_O[l][j][0];
  87.       dy2 = char_O[l][k][1] - char_O[l][j][1];
  88.       dz2 = char_O[l][k][2] - char_O[l][j][2];
  89.       normal_O[l][i][0] = dy2*dz1 - dy1*dz2;
  90.       normal_O[l][i][1] = dz2*dx1 - dz1*dx2;
  91.       normal_O[l][i][2] = dx2*dy1 - dx1*dy2; } }
  92. }
  93. void def_P(void) {
  94.   float a,s,c,ln;
  95.   int i,j,k,l,m,n;
  96.   float dx,dy;
  97.   float dx1,dx2,dy1,dy2,dz1,dz2;
  98.   GLfloat center_P[ACC2][3];
  99.   GLfloat width_P[ACC2];
  100.   for(i=0;i<ACC2;i++) {
  101.     a = 2.0*((float) i)*M_PI/ACC2;
  102.     s = 1+sin(a);
  103.     c = cos(a);
  104.     center_P[i][0] = c*2.15;
  105.     center_P[i][1] = s*2.1 +(s<-1.01?-0.7:(s>1.01?0.7:0)) + 0.7;
  106.     center_P[i][2] = 0.0;
  107.     width_P[i] = 0.5; }
  108.   for(i=0;i<ACC2;i++) {
  109.     j =(i+1)%ACC2;
  110.     k =(i+ACC2-1)%ACC2;
  111.     for(a=0;a<ACC;a++) {
  112.       accCOS[(int) a] = c = cos(a*M_PI*2.0/ACC);
  113.       accSIN[(int) a] = s = sin(a*M_PI*2.0/ACC);
  114.       dx = center_P[j][0] - center_P[k][0];
  115.       dy = center_P[j][1] - center_P[k][1];
  116.       ln = sqrt(dx*dx+dy*dy);
  117.       dx = dx/ln;
  118.       dy = dy/ln;
  119.       char_P[i][(int) a][0] = center_P[i][0] + width_P[i] * dy * c;
  120.       char_P[i][(int) a][1] = center_P[i][1] - width_P[i] * dx * c;
  121.       char_P[i][(int) a][2] =(s<-THLD?-THLD:(s>THLD?THLD:s)); } }
  122.   for(i=0;i<ACC;i++) {
  123.     j =(i+1)%ACC;
  124.     k =(i-1+ACC)%ACC;
  125.     for(l=0;l<ACC2;l++) {
  126.       m =(l+1)%ACC2;
  127.       n =(l+ACC2-1)%ACC2;
  128.       dx1 = char_P[m][i][0] - char_P[n][i][0];
  129.       dy1 = char_P[m][i][1] - char_P[n][i][1];
  130.       dz1 = char_P[m][i][2] - char_P[n][i][2];
  131.       dx2 = char_P[l][k][0] - char_P[l][j][0];
  132.       dy2 = char_P[l][k][1] - char_P[l][j][1];
  133.       dz2 = char_P[l][k][2] - char_P[l][j][2];
  134.       normal_P[l][i][0] = dy2*dz1 - dy1*dz2;
  135.       normal_P[l][i][1] = dz2*dx1 - dz1*dx2;
  136.       normal_P[l][i][2] = dx2*dy1 - dx1*dy2; } }
  137. }
  138. void def_El(void) {
  139.   float a,s,c,ln;
  140.   int i,j,k,l,m,n;
  141.   float dx,dy;
  142.   float dx1,dx2,dy1,dy2,dz1,dz2;
  143.   GLfloat center_El[ACC3+3][3];
  144.   GLfloat width_El[ACC3+3];
  145.   for(i=0;i<ACC3+1;i++) {
  146.     a =(ACC3/8 +((float) i)*3/4)*M_PI*2.0/ACC3;
  147.     s = 1+sin(a);
  148.     c = cos(a);
  149.     center_El[i][0] = c*18.0;
  150.     center_El[i][1] = s*9.3;
  151.     center_El[i][2] = 0.0;
  152.     width_El[i] = pow(3.5,sin(i*M_PI/ACC3))-0.6; }
  153.   for(i=0;i<ACC3+1;i++) {
  154.     j =(i+1)%ACC3;
  155.     k =(i+ACC3-1)%ACC3;
  156.     for(a=0;a<ACC;a++) {
  157.       c = cos(a*M_PI*2.0/ACC);
  158.       s = sin(a*M_PI*2.0/ACC);
  159.       dx = center_El[j][0] - center_El[k][0];
  160.       dy = center_El[j][1] - center_El[k][1];
  161.       ln = sqrt(dx*dx+dy*dy);
  162.       dx = dx/ln;
  163.       dy = dy/ln;
  164.       char_El[i][(int) a][0] = center_El[i][0] + width_El[i] * dy * c;
  165.       char_El[i][(int) a][1] = center_El[i][1] - width_El[i] * dx * c;
  166.       char_El[i][(int) a][2] =(s<-THLD2?-THLD2:(s>THLD2?THLD2:s)); } }
  167.   for(i=0;i<ACC+1;i++) {
  168.     j =(i+1)%ACC;
  169.     k =(i-1+ACC)%ACC;
  170.     for(l=0;l<ACC3;l++) {
  171.       m =(l+1)%ACC3;
  172.       n =(l+ACC3-1)%ACC3;
  173.       dx1 = char_El[m][i][0] - char_El[n][i][0];
  174.       dy1 = char_El[m][i][1] - char_El[n][i][1];
  175.       dz1 = char_El[m][i][2] - char_El[n][i][2];
  176.       dx2 = char_El[l][k][0] - char_El[l][j][0];
  177.       dy2 = char_El[l][k][1] - char_El[l][j][1];
  178.       dz2 = char_El[l][k][2] - char_El[l][j][2];
  179.       normal_El[l][i][0] = dy2*dz1 - dy1*dz2;
  180.       normal_El[l][i][1] = dz2*dx1 - dz1*dx2;
  181.       normal_El[l][i][2] = dx2*dy1 - dx1*dy2; } }
  182. }
  183. void def_G(void) {
  184.   float a,s,c,ln;
  185.   int i,j,k,l,m,n;
  186.   float dx,dy;
  187.   float dx1,dx2,dy1,dy2,dz1,dz2;
  188.   GLfloat center_G[ACC4][3];
  189.   GLfloat width_G[ACC4];
  190.   for(i=0;i<ACC4;i++) {
  191.     a = 2.0*((float) i)*M_PI/ACC4;
  192.     s = 1+sin(a);
  193.     c = cos(a);
  194.     center_G[i][0] = c*3.8;
  195.     center_G[i][1] = s*3.8+(s<-1.01?-0.8:(s>1.01?0.8:0)) + 0.8;
  196.     center_G[i][2] = 0.0;
  197.     width_G[i] = 0.9F;
  198.     if(i>ACC4*3/4)
  199.       width_G[i] = 0.9 -((i-ACC4*3/4)*0.9)/ACC; }
  200.   for(i=0;i<ACC4;i++) {
  201.     j =(i+1)%ACC4;
  202.     k =(i+ACC4-1)%ACC4;
  203.     for(a=0;a<ACC;a++) {
  204.       c = cos(a*M_PI*2.0/ACC);
  205.       s = sin(a*M_PI*2.0/ACC);
  206.       dx = center_G[j][0] - center_G[k][0];
  207.       dy = center_G[j][1] - center_G[k][1];
  208.       ln = sqrt(dx*dx+dy*dy);
  209.       dx = dx/ln;
  210.       dy = dy/ln;
  211.       char_G[i][(int) a][0] = center_G[i][0] + width_G[i] * dy * c;
  212.       char_G[i][(int) a][1] = center_G[i][1] - width_G[i] * dx * c;
  213.       char_G[i][(int) a][2] =(s<-THLD?-THLD:(s>THLD?THLD:s)); } }
  214.   for(i=0;i<ACC;i++) {
  215.     j =(i+1)%ACC;
  216.     k =(i-1+ACC)%ACC;
  217.     for(l=0;l<ACC4;l++) {
  218.       m =(l+1)%ACC4;
  219.       n =(l+ACC4-1)%ACC4;
  220.       dx1 = char_G[m][i][0] - char_G[n][i][0];
  221.       dy1 = char_G[m][i][1] - char_G[n][i][1];
  222.       dz1 = char_G[m][i][2] - char_G[n][i][2];
  223.       dx2 = char_G[l][k][0] - char_G[l][j][0];
  224.       dy2 = char_G[l][k][1] - char_G[l][j][1];
  225.       dz2 = char_G[l][k][2] - char_G[l][j][2];
  226.       normal_G[l][i][0] = dy2*dz1 - dy1*dz2;
  227.       normal_G[l][i][1] = dz2*dx1 - dz1*dx2;
  228.       normal_G[l][i][2] = dx2*dy1 - dx1*dy2; } }
  229. }
  230. void randomize(void) {
  231.   int i;
  232.   for(i=0;i<7;i++) {
  233.      TRANS[i][0] = rnd(100)-rnd(100);
  234.      TRANS[i][1] = rnd(100)-rnd(100);
  235.      TRANS[i][1] = rnd(100)-rnd(100);
  236.      ROTAXIS[i][0] = rnd(100)-rnd(100);
  237.      ROTAXIS[i][1] = rnd(100)-rnd(100);
  238.      ROTAXIS[i][1] = rnd(100)-rnd(100);
  239.      ROT[i]=rnd(3600)-rnd(3600);
  240.     }
  241.     
  242.     if (rotate_wire) rotate_wire = false;
  243.     else rotate_wire = true;
  244. }
  245. void def_logo(void) {
  246.   def_O();
  247.   def_P();
  248.   def_El();
  249.   def_G();
  250. }
  251. void draw_O(void) {
  252.   int i,j,k;
  253.   for(i=0;i<ACC;i++) {
  254.     k = i+1;
  255.     if(k>=ACC)
  256.       k = 0;
  257.     glBegin(GL_QUAD_STRIP);
  258.     for(j=0;j<ACC4;j++) {
  259.       glNormal3f(normal_O[j][k][0],normal_O[j][k][1],normal_O[j][k][2]);
  260.       glVertex3f(char_O[j][k][0],char_O[j][k][1],char_O[j][k][2]);
  261.       glNormal3f(normal_O[j][i][0],normal_O[j][i][1],normal_O[j][i][2]);
  262.       glVertex3f(char_O[j][i][0],char_O[j][i][1],char_O[j][i][2]); }
  263.     glNormal3f(normal_O[0][k][0],normal_O[0][k][1],normal_O[0][k][2]);
  264.     glVertex3f(char_O[0][k][0],char_O[0][k][1],char_O[0][k][2]);
  265.     glNormal3f(normal_O[0][i][0],normal_O[0][i][1],normal_O[0][i][2]);
  266.     glVertex3f(char_O[0][i][0],char_O[0][i][1],char_O[0][i][2]);
  267.     glEnd(); }
  268. }
  269. void draw_P(void) {
  270.   int i,j,k;
  271.   for(i=0;i<ACC;i++) {
  272.     k = i+1;
  273.     if(k>=ACC)
  274.       k = 0;
  275.     glBegin(GL_QUAD_STRIP);
  276.     for(j=0;j<ACC2;j++) {
  277.       glNormal3f(normal_P[j][k][0],normal_P[j][k][1],normal_P[j][k][2]);
  278.       glVertex3f(char_P[j][k][0],char_P[j][k][1],char_P[j][k][2]);
  279.       glNormal3f(normal_P[j][i][0],normal_P[j][i][1],normal_P[j][i][2]);
  280.       glVertex3f(char_P[j][i][0],char_P[j][i][1],char_P[j][i][2]); }
  281.     glNormal3f(normal_P[0][k][0],normal_P[0][k][1],normal_P[0][k][2]);
  282.     glVertex3f(char_P[0][k][0],char_P[0][k][1],char_P[0][k][2]);
  283.     glNormal3f(normal_P[0][i][0],normal_P[0][i][1],normal_P[0][i][2]);
  284.     glVertex3f(char_P[0][i][0],char_P[0][i][1],char_P[0][i][2]);
  285.     glEnd(); }
  286.   j = 0;
  287.   glBegin(GL_QUAD_STRIP);
  288.   for(i=0;i<ACC;i++) {
  289.     glNormal3f(normal_P[0][i][0],normal_P[0][i][1],normal_P[0][i][2]);
  290.     glVertex3f(char_P[0][i][0]-4.3,-1.6F,1.0*char_P[0][i][2]);
  291.     glVertex3f(char_P[0][i][0]-4.3,6.0F,1.0*char_P[0][i][2]); }
  292.   glNormal3f(normal_P[0][0][0],normal_P[0][0][1],normal_P[0][0][2]);
  293.   glVertex3f(char_P[0][0][0]-4.3,-1.6F,1.0*char_P[0][0][2]);
  294.   glVertex3f(char_P[0][0][0]-4.3,6.0F,1.0*char_P[0][0][2]);
  295.   glEnd();
  296. }
  297. void draw_E(void) {
  298.   int i,j,k;
  299.   for(i=0;i<ACC;i++) {
  300.     k = i+1;
  301.     if(k>=ACC)
  302.       k = 0;
  303.     glBegin(GL_QUAD_STRIP);
  304.     glNormal3f(normal_P[0][k][0],normal_P[0][k][1],normal_P[0][k][2]);
  305.     glVertex3f(char_P[0][k][0],char_P[0][k][1]+0.0,char_P[0][k][2]);
  306.     glNormal3f(normal_P[0][i][0],normal_P[0][i][1],normal_P[0][i][2]);
  307.     glVertex3f(char_P[0][i][0],char_P[0][i][1]+0.0,char_P[0][i][2]);
  308.     for(j=1;j<ACC2;j++) {
  309.       glNormal3f(normal_P[j][k][0],normal_P[j][k][1],normal_P[j][k][2]);
  310.       glVertex3f(char_P[j][k][0],char_P[j][k][1],char_P[j][k][2]);
  311.       glNormal3f(normal_P[j][i][0],normal_P[j][i][1],normal_P[j][i][2]);
  312.       glVertex3f(char_P[j][i][0],char_P[j][i][1],char_P[j][i][2]); }
  313.     glNormal3f(normal_P[0][k][0],normal_P[0][k][1],normal_P[0][k][2]);
  314.     glVertex3f(char_P[0][k][0],char_P[0][k][1]-0.4,char_P[0][k][2]);
  315.     glNormal3f(normal_P[0][i][0],normal_P[0][i][1],normal_P[0][i][2]);
  316.     glVertex3f(char_P[0][i][0],char_P[0][i][1]-0.4,char_P[0][i][2]);
  317.     glEnd(); }
  318.   glBegin(GL_QUAD_STRIP);
  319.   j = ACC2*3/4;
  320.   for(i=0;i<ACC;i++) {
  321.     glNormal3f(normal_P[j][i][0],normal_P[j][i][1],normal_P[j][i][2]);
  322.     glVertex3f(-2.0,char_P[j][i][1]+2.55,1.0*char_P[j][i][2]);
  323.     glVertex3f(2.0,char_P[j][i][1]+2.55,1.0*char_P[j][i][2]); }
  324.   glNormal3f(normal_P[j][0][0],normal_P[j][0][1],normal_P[j][0][2]);
  325.   glVertex3f(-2.0,char_P[j][0][1]+2.55,1.0*char_P[j][0][2]);
  326.   glVertex3f(2.0,char_P[j][0][1]+2.55,1.0*char_P[j][0][2]);
  327.   glEnd();
  328. }
  329. void draw_El(void) {
  330.   int i,j,k;
  331.   for(i=0;i<ACC;i++) {
  332.     k = i+1;
  333.     if(k>=ACC)
  334.       k = 0;
  335.     glBegin(GL_QUAD_STRIP);
  336.     for(j=0;j<=ACC3;j++) {
  337.       glNormal3f(normal_El[j][k][0],normal_El[j][k][1],normal_El[j][k][2]);
  338.       glVertex3f(char_El[j][k][0],char_El[j][k][1],char_El[j][k][2]);
  339.       glNormal3f(normal_El[j][i][0],normal_El[j][i][1],normal_El[j][i][2]);
  340.       glVertex3f(char_El[j][i][0],char_El[j][i][1],char_El[j][i][2]); }
  341.     glEnd(); }
  342. }
  343. void draw_N(void) {
  344.   int i,j,k;
  345.   for(i=0;i<ACC;i++) {
  346.     k = i+1;
  347.     if(k>=ACC)
  348.       k = 0;
  349.     glBegin(GL_QUAD_STRIP);
  350.     for(j=0;j<=ACC2/2;j++) {
  351.       glNormal3f(normal_P[j][k][0],normal_P[j][k][1],normal_P[j][k][2]);
  352.       glVertex3f(char_P[j][k][0],char_P[j][k][1],char_P[j][k][2]);
  353.       glNormal3f(normal_P[j][i][0],normal_P[j][i][1],normal_P[j][i][2]);
  354.       glVertex3f(char_P[j][i][0],char_P[j][i][1],char_P[j][i][2]); }
  355.     glEnd(); }
  356.   j = 0;
  357.   glBegin(GL_QUAD_STRIP);
  358.   for(i=0;i<ACC;i++) {
  359.     glNormal3f(normal_P[0][i][0],normal_P[0][i][1],normal_P[0][i][2]);
  360.     glVertex3f(char_P[0][i][0]-4.3,0.2F,1.0*char_P[0][i][2]);
  361.     glVertex3f(char_P[0][i][0]-4.3,6.0F,1.0*char_P[0][i][2]); }
  362.   glNormal3f(normal_P[0][0][0],normal_P[0][0][1],normal_P[0][0][2]);
  363.   glVertex3f(char_P[0][0][0]-4.3,0.2F,1.0*char_P[0][0][2]);
  364.   glVertex3f(char_P[0][0][0]-4.3,6.0F,1.0*char_P[0][0][2]);
  365.   glEnd();
  366.   j = 0;
  367.   glBegin(GL_QUAD_STRIP);
  368.   for(i=0;i<ACC;i++) {
  369.     glNormal3f(normal_P[0][i][0],normal_P[0][i][1],normal_P[0][i][2]);
  370.     glVertex3f(char_P[0][i][0],0.2F,1.0*char_P[0][i][2]);
  371.     glVertex3f(char_P[0][i][0],3.4F,1.0*char_P[0][i][2]); }
  372.   glNormal3f(normal_P[0][0][0],normal_P[0][0][1],normal_P[0][0][2]);
  373.   glVertex3f(char_P[0][0][0],0.2F,1.0*char_P[0][0][2]);
  374.   glVertex3f(char_P[0][0][0],3.4F,1.0*char_P[0][0][2]);
  375.   glEnd();
  376. }
  377. void draw_G(void) {
  378.   int i,j,k;
  379.   for(i=0;i<ACC;i++) {
  380.     k = i+1;
  381.     if(k>=ACC)
  382.       k = 0;
  383.     glBegin(GL_QUAD_STRIP);
  384.     glNormal3f(normal_G[0][k][0],normal_G[0][k][1],normal_G[0][k][2]);
  385.     glVertex3f(char_G[0][k][0],char_G[0][k][1]+1.2,char_G[0][k][2]);
  386.     glNormal3f(normal_G[0][i][0],normal_G[0][i][1],normal_G[0][i][2]);
  387.     glVertex3f(char_G[0][i][0],char_G[0][i][1]+1.2,char_G[0][i][2]);
  388.     for(j=1;j<ACC4;j++) {
  389.       glNormal3f(normal_G[j][k][0],normal_G[j][k][1],normal_G[j][k][2]);
  390.       glVertex3f(char_G[j][k][0],char_G[j][k][1],char_G[j][k][2]);
  391.       glNormal3f(normal_G[j][i][0],normal_G[j][i][1],normal_G[j][i][2]);
  392.       glVertex3f(char_G[j][i][0],char_G[j][i][1],char_G[j][i][2]); }
  393.     glEnd(); }
  394.   glBegin(GL_QUAD_STRIP);
  395.   j = ACC4*3/4;
  396.   for(i=0;i<ACC;i++) {
  397.     glNormal3f(accSIN[i],0.0,accCOS[i] );
  398.     glVertex3f(4.0+0.9*accSIN[i],4.0+0.9*accSIN[i],0.9*accCOS[i] );
  399.     glVertex3f(4.0+0.9*accSIN[i],0.0,0.9*accCOS[i]); }
  400.   glNormal3f(accSIN[0],0.0,accCOS[0] );
  401.   glVertex3f(4.0+0.9*accSIN[0],4.0+0.9*accSIN[0],0.9*accCOS[0] );
  402.   glVertex3f(4.0+0.9*accSIN[0],0.0,0.9*accCOS[0]);
  403.   glEnd();
  404.   glBegin(GL_QUAD_STRIP);
  405.   j = ACC4*3/4;
  406.   for(i=0;i<ACC;i++) {
  407.     glNormal3f(0.0,accSIN[i],accCOS[i] );
  408.     glVertex3f(4.0-0.9*accSIN[i],4.0-0.9*accSIN[i],0.9*accCOS[i] );
  409.     glVertex3f(0.0,4.0-0.9*accSIN[i],0.9*accCOS[i]); }
  410.   glNormal3f(0.0,accSIN[0],accCOS[0] );
  411.   glVertex3f(4.0-0.9*accSIN[0],4.0-0.9*accSIN[0],0.9*accCOS[0] );
  412.   glVertex3f(0.0,4.0-0.9*accSIN[0],0.9*accCOS[0]);
  413.   glEnd();
  414.   j = ACC4*3/4;
  415.   glBegin(GL_TRIANGLE_FAN);
  416.   glNormal3f(-1.0,0.0,0.0);
  417.   glVertex3f(0.0,4.0,0.0);
  418.   for(i=0;i<ACC;i++)
  419.     glVertex3f(0.0,4.0+0.9*accSIN[i],0.9*accCOS[i]);
  420.   glVertex3f(0.0,4.0+0.9*accSIN[0],0.9*accCOS[0]);
  421.   glEnd();
  422. }
  423. void draw_L(void) {
  424.   int i;
  425.   glBegin(GL_QUAD_STRIP);
  426.   for(i=0;i<ACC;i++) {
  427.     glNormal3f(accSIN[i],0.0,accCOS[i] );
  428.     glVertex3f(0.9*accSIN[i],9.6F,0.9*accCOS[i]);
  429.     glVertex3f(0.9*accSIN[i],0.9+0.9*accSIN[i],0.9*accCOS[i] ); }
  430.   glNormal3f(accSIN[0],0.0,accCOS[0] );
  431.   glVertex3f(0.9*accSIN[0],9.6F,0.9*accCOS[0]);
  432.   glVertex3f(0.9*accSIN[0],0.9+0.9*accSIN[0],0.9*accCOS[0] );
  433.   glEnd();
  434.   glBegin(GL_QUAD_STRIP);
  435.   for(i=0;i<ACC;i++) {
  436.     glNormal3f(0.0,accSIN[i],accCOS[i] );
  437.     glVertex3f(0.9*accSIN[i],0.9+0.9*accSIN[i],0.9*accCOS[i] );
  438.     glVertex3f(5.6F,0.9+0.9*accSIN[i],0.9*accCOS[i]); }
  439.   glNormal3f(0.0,accSIN[0],accCOS[0] );
  440.   glVertex3f(0.9*accSIN[0],0.9+0.9*accSIN[0],0.9*accCOS[0] );
  441.   glVertex3f(5.6F,0.9+0.9*accSIN[0],0.9*accCOS[0]);
  442.   glEnd();
  443.   glBegin(GL_TRIANGLE_FAN);
  444.   glNormal3f(1.0F,0.0F,0.0F);
  445.   glVertex3f(5.6F,0.9F,0.0F);
  446.   for(i=ACC-1;i>=0;i--)
  447.     glVertex3f(5.6F,0.9+0.9*accSIN[i],0.9*accCOS[i]);
  448.   glVertex3f(5.6F,0.9+0.9*accSIN[ACC-1],0.9*accCOS[ACC-1]);
  449.   glEnd();
  450. }
  451. void draw_part(int i) {
  452.   glPushMatrix();
  453.   glTranslatef(TRANS[i][0]*progress,TRANS[i][1]*progress,TRANS[i][2]*progress);
  454.   glRotatef(ROT[i]*progress,ROTAXIS[i][0],ROTAXIS[i][1],ROTAXIS[i][2]);
  455.   switch(i) {
  456.     case 0 : draw_El(); 
  457.              break;
  458.     case 1 : draw_O();
  459.              break;
  460.     case 2 : draw_P();
  461.              break;
  462.     case 3 : draw_E();
  463.              break;
  464.     case 4 : draw_N();
  465.              break;
  466.     case 5 : draw_G();
  467.              break;
  468.     case 6 : draw_L();
  469.              break; }
  470.   glPopMatrix();
  471. }
  472. void draw_logo(void) {
  473.   groen_texture();
  474.   glEnable(GL_CULL_FACE);
  475.   glTranslatef(-2.8F,0.0F,0.0F);
  476.   draw_part(0);
  477.   glTranslatef(-12.0F,4.3F,0.0F);
  478.   draw_part(1);
  479.   glTranslatef(7.3F,0.0F,0.0F);
  480.   draw_part(2);
  481.   glTranslatef(5.4F,0.0F,0.0F);
  482.   draw_part(3);
  483.   glTranslatef(5.4F,0.0F,0.0F);
  484.   draw_part(4);
  485.   glTranslatef(7.4F,0.0F,0.0F);
  486.   draw_part(5);
  487.   glTranslatef(6.8F,0.0F,0.0F);
  488.   draw_part(6);
  489. }
  490. void Init()
  491. {
  492. randomize();
  493. glShadeModel(GL_SMOOTH);
  494. glEnable(GL_DEPTH_TEST);
  495. glLightfv(GL_LIGHT0,GL_POSITION,lightpos);
  496. glLightfv(GL_LIGHT0,GL_AMBIENT,lightamb);
  497. glLightfv(GL_LIGHT0,GL_DIFFUSE,lightdif);
  498. glEnable(GL_LIGHTING);
  499. glEnable(GL_LIGHT0);
  500. glColor3f(1.0,1.0,1.0);
  501. glClearColor(0.0,0.0,0.0,1.0);
  502. glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
  503. glEnable(GL_NORMALIZE);
  504. def_logo();
  505. glCullFace(GL_BACK);
  506. glEnable(GL_CULL_FACE);
  507. }
  508. void Draw()
  509. {
  510. glColor3f(1.0,1.0,1.0);
  511. glClearColor(0.0,0.0,0.0,1.0);
  512. SetCamera();
  513. if (rotate_wire) {
  514.  glPolygonMode(GL_FRONT, GL_LINE);
  515. draw_logo();
  516. } else {
  517. glPolygonMode(GL_FRONT, GL_FILL);
  518. draw_logo();
  519. }
  520. }
  521. void Animate()
  522. {
  523. speed = -0.95*speed + progress*0.05;
  524. if(progress > 0.0 && speed < 0.0003)
  525. speed = 0.0003F;
  526. if(speed > 0.01)
  527. speed = 0.01F;
  528. progress = progress - speed;
  529. if(progress < 0.0) {
  530. progress = 0.0;
  531. speed = 0;
  532. }
  533. }
  534. void SetCamera()
  535. {
  536. glMatrixMode(GL_PROJECTION);
  537. glLoadIdentity();
  538. glFrustum(-0.1333,0.1333,-0.1,0.1,0.2,150.0);
  539. glMatrixMode(GL_MODELVIEW);
  540. glLoadIdentity();
  541. gluLookAt(
  542. 0, 1.5, 6, // PosX, PosY, PosZ
  543. 0, 1.5, 0, // ViewX, ViewY, ViwZ
  544. 0, 1, 0); // UpX, UpY, UpZ
  545. glTranslatef(0.0,-8.0,-45.0);
  546. glRotatef(-progress*720,0.0,1.0,0.0);
  547. }
  548. void Reset()
  549. {
  550. if (ResetIt <= 4) {
  551. progress = 1;
  552. ResetIt++;
  553. randomize();
  554. }
  555. }
  556. }