/* * 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 #include #ifndef M_PI #define M_PI 3.14159265359F #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.425F,0.570F,0.664F,1.0F }; GLfloat difamb4[4] = { 0.425F,0.570F,0.664F,1.0F }; GLfloat matspec4[4] = { 0.174F,0.174F,0.174F,1.0F }; 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.6F; } 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.9F; 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.6F,0.9+0.9*accSIN[i],0.9*accCOS[i]); glVertex3f(5.6F,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.8F,0.0F,0.0F); draw_part(0); glTranslatef(-12.0F,4.3F,0.0F); draw_part(1); glTranslatef(7.3F,0.0F,0.0F); draw_part(2); glTranslatef(5.4F,0.0F,0.0F); draw_part(3); glTranslatef(5.4F,0.0F,0.0F); draw_part(4); glTranslatef(7.4F,0.0F,0.0F); draw_part(5); glTranslatef(6.8F,0.0F,0.0F); draw_part(6); }