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

GIS编程

开发平台:

Visual C++

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