/* * Def_logo.c * * This file is part of the openGL-logo demo. * (c) Henk Kok (kok@wins.uva.nl) * * Copying, redistributing, etc is permitted as long as this copyright * notice and the Dutch variable names :) stay in tact. */ #include #include /* some math.h's don't define M_PI */ #ifndef M_PI #define M_PI 3.14159265359 #endif #define ACC 8 #define ACC2 16 #define ACC3 48 #define ACC4 24 #define THLD 0.6 #define THLD2 0.8 extern int angle, rotating; extern float progress; GLfloat TRANS[7][3]; GLfloat ROTAXIS[7][3]; GLfloat ROT[7]; GLfloat char_El[ACC3+1][ACC][3]; GLfloat normal_El[ACC3+1][ACC][3]; GLfloat char_O[ACC4][ACC][3]; GLfloat normal_O[ACC4][ACC][3]; GLfloat char_P[ACC2][ACC][3]; GLfloat normal_P[ACC2][ACC][3]; GLfloat char_G[ACC4][ACC][3]; GLfloat normal_G[ACC4][ACC][3]; GLfloat accSIN[ACC], accCOS[ACC]; GLfloat difmat4[4] = { 0.425, 0.570, 0.664, 1.0 }; GLfloat difamb4[4] = { 0.425, 0.570, 0.664, 1.0 }; GLfloat matspec4[4] = { 0.174, 0.174, 0.174, 1.0 }; int rnd(int i) { return rand()%i; } void groen_texture(void) { glMaterialfv(GL_FRONT, GL_DIFFUSE, difmat4); glMaterialfv(GL_FRONT, GL_AMBIENT, difamb4); glMaterialfv(GL_FRONT, GL_SPECULAR, matspec4); glMaterialf(GL_FRONT, GL_SHININESS, 35.0); } void def_O(void) { float a, s, c, ln; int i,j,k,l,m,n; float dx, dy; float dx1, dx2, dy1, dy2, dz1, dz2; GLfloat center_O[ACC4+4][3]; GLfloat width_O[ACC4+4]; for (i=0;i1.01?0.8:0)) + 0.8; center_O[i][2] = 0.0; width_O[i] = 0.6; } /* I should be able to generalise this. oh well */ for (i=0;iTHLD?THLD:s)); } } for (i=0;i1.01?0.7:0)) + 0.7; center_P[i][2] = 0.0; width_P[i] = 0.5; } for (i=0;iTHLD?THLD:s)); } } for (i=0;iTHLD2?THLD2:s)); } } for (i=0;i1.01?0.8:0)) + 0.8; center_G[i][2] = 0.0; width_G[i] = 0.9; if (i>ACC4*3/4) width_G[i] = 0.9 - ((i-ACC4*3/4)*0.9)/ACC; } for (i=0;iTHLD?THLD:s)); } } for (i=0;i=ACC) k = 0; glBegin(GL_QUAD_STRIP); for (j=0;j=ACC) k = 0; glBegin(GL_QUAD_STRIP); for (j=0;j=ACC) k = 0; glBegin(GL_QUAD_STRIP); glNormal3f(normal_P[0][k][0], normal_P[0][k][1], normal_P[0][k][2]); glVertex3f(char_P[0][k][0], char_P[0][k][1]+0.0, char_P[0][k][2]); glNormal3f(normal_P[0][i][0], normal_P[0][i][1], normal_P[0][i][2]); glVertex3f(char_P[0][i][0], char_P[0][i][1]+0.0, char_P[0][i][2]); for (j=1;j=ACC) k = 0; glBegin(GL_QUAD_STRIP); for (j=0;j<=ACC3;j++) { glNormal3f(normal_El[j][k][0], normal_El[j][k][1], normal_El[j][k][2]); glVertex3f(char_El[j][k][0], char_El[j][k][1], char_El[j][k][2]); glNormal3f(normal_El[j][i][0], normal_El[j][i][1], normal_El[j][i][2]); glVertex3f(char_El[j][i][0], char_El[j][i][1], char_El[j][i][2]); } glEnd(); } } void draw_N(void) { int i,j,k; for (i=0;i=ACC) k = 0; glBegin(GL_QUAD_STRIP); for (j=0;j<=ACC2/2;j++) { glNormal3f(normal_P[j][k][0], normal_P[j][k][1], normal_P[j][k][2]); glVertex3f(char_P[j][k][0], char_P[j][k][1], char_P[j][k][2]); glNormal3f(normal_P[j][i][0], normal_P[j][i][1], normal_P[j][i][2]); glVertex3f(char_P[j][i][0], char_P[j][i][1], char_P[j][i][2]); } glEnd(); } j = 0; glBegin(GL_QUAD_STRIP); for (i=0;i=ACC) k = 0; glBegin(GL_QUAD_STRIP); glNormal3f(normal_G[0][k][0], normal_G[0][k][1], normal_G[0][k][2]); glVertex3f(char_G[0][k][0], char_G[0][k][1]+1.2, char_G[0][k][2]); glNormal3f(normal_G[0][i][0], normal_G[0][i][1], normal_G[0][i][2]); glVertex3f(char_G[0][i][0], char_G[0][i][1]+1.2, char_G[0][i][2]); for (j=1;j=0;i--) glVertex3f(5.6, 0.9+0.9*accSIN[i], 0.9*accCOS[i]); glVertex3f(5.6, 0.9+0.9*accSIN[ACC-1], 0.9*accCOS[ACC-1]); glEnd(); } void draw_part(int i) { glPushMatrix(); glTranslatef(TRANS[i][0]*progress, TRANS[i][1]*progress, TRANS[i][2]*progress); glRotatef(ROT[i]*progress, ROTAXIS[i][0], ROTAXIS[i][1], ROTAXIS[i][2]); switch(i) { case 0: draw_El(); break; case 1: draw_O(); break; case 2: draw_P(); break; case 3: draw_E(); break; case 4: draw_N(); break; case 5: draw_G(); break; case 6: draw_L(); break; } glPopMatrix(); } void draw_logo(void) { groen_texture(); glEnable(GL_CULL_FACE); glTranslatef(-2.8, 0.0, 0.0); draw_part(0); glTranslatef(-12.0, 4.3, 0.0); draw_part(1); glTranslatef(7.3, 0.0, 0.0); draw_part(2); glTranslatef(5.4, 0.0, 0.0); draw_part(3); glTranslatef(5.4, 0.0, 0.0); draw_part(4); glTranslatef(7.4, 0.0, 0.0); draw_part(5); glTranslatef(6.8, 0.0, 0.0); draw_part(6); }