Professional Documents
Culture Documents
h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <glut.h>
GLfloat letterS[][3] =
{
{-2.0,0.0,0.0},
{-2.0,2.0,0.0},
{-1.0,2.0,0.0},
{-1.0,1.0,0.0},
{1.0,1.0,0.0},
{1.0,3.0,0.0},
{-2.0,3.0,0.0},
{-2.0,7.0,0.0},
{2.0,7.0,0.0},
{2.0,5.0,0.0},
{1.0,5.0,0.0},
{1.0,6.0,0.0},
{-1.0,6.0,0.0},
{-1.0,4.0,0.0},
{2.0,4.0,0.0},
{2.0,0.0,0.0}
};
GLfloat letterJ[][3] =
{
{-2.0,0.0,0.0},
{-2.0,2.50,0.0},
{-1.0,2.50,0.0},
{-1.0,1.50,0.0},
{1.0,1.50,0.0},
{1.0,7.0,0.0},
{2.0,7.0,0.0},
{2.0,0.0,0.0}
};
GLfloat letterC[][3] =
{
{-2.0,0.0,0.0},
{-2.0,7.0,0.0},
{2.0,7.0,0.0},
{2.0,5.0,0.0},
{1.0,5.0,0.0},
{1.0,6.0,0.0},
{-1.0,6.0,0.0},
{-1.0,1.0,0.0},
{1.0,1.0,0.0},
{1.0,2.0,0.0},
{2.0,2.0,0.0},
{2.0,0.0,0.0}
};
GLfloat letterI[][3]=
{
{-0.5,0.0,0.0},
{-0.5,7.0,0.0},
{0.5,7.0,0.0},
{0.5,0.0,0.0}
};
GLfloat letterT[][3] =
{
{-2.0,7.0,0.0},
{2.0,7.0,0.0},
{2.0,6.0,0.0},
{0.5,6.0,0.0},
{0.5,0.0,0.0},
{-0.5,0.0,0.0},
{-0.5,6.0,0.0},
{-2.0,6.0,0.0}
};
void myinit(void)
{
int count1 = sizeof(letterS) / (3 * sizeof(GLfloat));
int count2 = sizeof(letterJ) / (3 * sizeof(GLfloat));
int count3 = sizeof(letterC) / (3 * sizeof(GLfloat));
int count4 = sizeof(letterI) / (3 * sizeof(GLfloat));
int count5 = sizeof(letterT) / (3 * sizeof(GLfloat));
int i;
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glDepthFunc(GL_LESS);
glEnable(GL_DEPTH_TEST);
glDrawBuffer(GL_FRONT_AND_BACK);
glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
glClear(GL_ACCUM_BUFFER_BIT);
glDrawBuffer(GL_BACK);
if (tobj == NULL) {
tobj = gluNewTess();
vertex[0] = data[i][0];
vertex[1] = data[i][1];
vertex[2] = 0.0;
gluTessVertex(tobj, vertex, data[i]);
}
gluEndPolygon(tobj);
glEndList();
if (flag == 1) {
data[k][2] = 10000.0;
flag = 0;
}
glNewList(edge, GL_COMPILE);
glBegin(GL_QUAD_STRIP);
for(i = 0; i <= count; i++) {
glVertex3f(data[i % count][0], data[i % count][1], 0.0);
glVertex3f(data[i % count][0], data[i % count][1], thickness);
dx = data[(i+ 1) % count][1] - data[i % count][1];
dy = data[i % count][0] - data[(i + 1) % count][0];
len = sqrt(dx * dx + dy * dy);
glNormal3f(dx / len, dy / len, 0.0);
}
glEnd();
glEndList();
glNewList(whole, GL_COMPILE);
glFrontFace(GL_CW);
glCallList(edge);
glNormal3f(0.0, 0.0, -1.0);
glCallList(side);
glPushMatrix();
glTranslatef(0.0, 0.0, thickness);
glFrontFace(GL_CCW);
glNormal3f(0.0, 0.0, 1.0);
glCallList(side);
glPopMatrix();
glEndList();
}
void repeat(int j)
{
switch(pos)
{
case 1:{
if(j == 2){
glPushMatrix();
glTranslatef((31 * -0.4) , 9, -9);
glCallList(REPEAT1);
glPopMatrix();
}
if(j == 3){
glPushMatrix();
glTranslatef(31 * -0.4, 9, -9);
glCallList(REPEAT1);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * -.20, 9, -9);
glCallList(REPEAT2);
glPopMatrix();
}
if(j == 4){
glPushMatrix();
glTranslatef(31 * -0.4, 9, -9);
glCallList(REPEAT1);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * -.2, 9, -9);
glCallList(REPEAT2);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * 0, 9, -9);
glCallList(REPEAT3);
glPopMatrix();
}
if(j == 5){
glPushMatrix();
glTranslatef(31 * -0.4, 9, -9);
glCallList(REPEAT1);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * -.2, 9, -9);
glCallList(REPEAT2);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * 0, 9, -9);
glCallList(REPEAT3);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * 0.2, 9, -9);
glCallList(REPEAT4);
glPopMatrix();
}
if(j == 6){
glPushMatrix();
glTranslatef(31 * -0.4, 9, -9);
glCallList(REPEAT1);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * -.2, 9, -9);
glCallList(REPEAT2);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * 0, 9, -9);
glCallList(REPEAT3);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * .2, 9, -9);
glCallList(REPEAT4);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * .4, 9, -9);
glCallList(REPEAT5);
glPopMatrix();
}
break;
}
case 4:{
if(j == 2){
glPushMatrix();
glTranslatef(31 * -0.4, 9, -9);
glCallList(REPEAT1);
glPopMatrix();
}
if(j == 3){
glPushMatrix();
glTranslatef(31 * -0.4, 9, -9);
glCallList(REPEAT1);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * -.2, 3, -9);
glCallList(REPEAT2);
glPopMatrix();
}
if(j == 4){
glPushMatrix();
glTranslatef(31 * -0.4, 9, -9);
glCallList(REPEAT1);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * -.2, 3, -9);
glCallList(REPEAT2);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * 0.0, -3, -9);
glCallList(REPEAT3);
glPopMatrix();
}
if(j == 5){
glPushMatrix();
glTranslatef(31 * -0.4, 9, -9);
glCallList(REPEAT1);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * -.2, 3, -9);
glCallList(REPEAT2);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * 0.0, -3, -9);
glCallList(REPEAT3);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * 0.2, -9, -9);
glCallList(REPEAT4);
glPopMatrix();
}
if(j == 6){
glPushMatrix();
glTranslatef(31 * -0.4, 9, -9);
glCallList(REPEAT1);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * -.2, 3, -9);
glCallList(REPEAT2);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * 0.0, -3, -9);
glCallList(REPEAT3);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * 0.2, -9, -9);
glCallList(REPEAT4);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * 0.4, -15, -9);
glCallList(REPEAT5);
glPopMatrix();
}
break;
}
case 5:{
if(j == 2){
glPushMatrix();
glTranslatef(31 * -0.5, 15, -9);
glCallList(REPEAT1);
glPopMatrix();
}
if(j == 3){
glPushMatrix();
glTranslatef(31 * -0.5, 15, -9);
glCallList(REPEAT1);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * -0.5, 5, -9);
glCallList(REPEAT2);
glPopMatrix();
}
if(j == 4){
glPushMatrix();
glTranslatef(31 * -0.5, 15, -9);
glCallList(REPEAT1);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * -0.5, 5, -9);
glCallList(REPEAT2);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * -0.5, -5, -9);
glCallList(REPEAT3);
glPopMatrix();
}
if(j == 5){
glPushMatrix();
glTranslatef(31 * -0.5, 15, -9);
glCallList(REPEAT1);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * -0.5, 5, -9);
glCallList(REPEAT2);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * -0.5, -5, -9);
glCallList(REPEAT3);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * -0.5, -15, -9);
glCallList(REPEAT4);
glPopMatrix();
}
if(j == 6){
glPushMatrix();
glTranslatef(31 * -0.5, 15, -9);
glCallList(REPEAT1);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * -0.5, 5, -9);
glCallList(REPEAT2);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * -0.5, -5, -9);
glCallList(REPEAT3);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * -0.5, -15, -9);
glCallList(REPEAT4);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * -0.5, -25, -9);
glCallList(REPEAT5);
glPopMatrix();
}
break;
}
case 6:{
if(j == 2){
glPushMatrix();
glTranslatef(31 * 0.5, 15, -9);
glCallList(REPEAT1);
glPopMatrix();
}
if(j == 3){
glPushMatrix();
glTranslatef(31 * 0.5, 15, -9);
glCallList(REPEAT1);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * 0.5, 5, -9);
glCallList(REPEAT2);
glPopMatrix();
}
if(j == 4){
glPushMatrix();
glTranslatef(31 * 0.5, 15, -9);
glCallList(REPEAT1);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * 0.5, 5, -9);
glCallList(REPEAT2);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * 0.5, -5, -9);
glCallList(REPEAT3);
glPopMatrix();
}
if(j == 5){
glPushMatrix();
glTranslatef(31 * 0.5, 15, -9);
glCallList(REPEAT1);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * 0.5, 5, -9);
glCallList(REPEAT2);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * 0.5, -5, -9);
glCallList(REPEAT3);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * 0.5, -15, -9);
glCallList(REPEAT4);
glPopMatrix();
}
if(j == 6){
glPushMatrix();
glTranslatef(31 * 0.5, 15, -9);
glCallList(REPEAT1);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * 0.5, 5, -9);
glCallList(REPEAT2);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * 0.5, -5, -9);
glCallList(REPEAT3);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * .5, -15, -9);
glCallList(REPEAT4);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * 0.5, -25, -9);
glCallList(REPEAT5);
glPopMatrix();
}
break;
}
case 2:{
if(j == 2){
glPushMatrix();
glTranslatef((31 * -0.4) , -9, -9);
glCallList(REPEAT1);
glPopMatrix();
}
if(j == 3){
glPushMatrix();
glTranslatef(31 * -0.4, -9, -9);
glCallList(REPEAT1);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * -.2, -9, -9);
glCallList(REPEAT2);
glPopMatrix();
}
if(j == 4){
glPushMatrix();
glTranslatef(31 * -0.4, -9, -9);
glCallList(REPEAT1);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * -.2, -9, -9);
glCallList(REPEAT2);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * 0.0, -9, -9);
glCallList(REPEAT3);
glPopMatrix();
}
if(j == 5){
glPushMatrix();
glTranslatef(31 * -0.4, -9, -9);
glCallList(REPEAT1);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * -.2, -9, -9);
glCallList(REPEAT2);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * 0.0, -9, -9);
glCallList(REPEAT3);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * 0.2, -9, -9);
glCallList(REPEAT4);
glPopMatrix();
}
if(j == 6){
glPushMatrix();
glTranslatef(31 * -0.4, -9, -9);
glCallList(REPEAT1);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * -.2, -9, -9);
glCallList(REPEAT2);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * 0.0, -9, -9);
glCallList(REPEAT3);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * 0.2, -9, -9);
glCallList(REPEAT4);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * 0.4, -9, -9);
glCallList(REPEAT5);
glPopMatrix();
}
break;
}
case 3:
{
if(j == 2){
glPushMatrix();
glTranslatef((31 * -0.4) , -9, -9);
glCallList(REPEAT1);
glPopMatrix();
}
if(j == 3){
glPushMatrix();
glTranslatef(31 * -0.4, -9, -9);
glCallList(REPEAT1);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * -.2, -3, -9);
glCallList(REPEAT2);
glPopMatrix();
}
if(j == 4){
glPushMatrix();
glTranslatef(31 * -0.4, -9, -9);
glCallList(REPEAT1);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * -.2, -3, -9);
glCallList(REPEAT2);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * 0, 3, -9);
glCallList(REPEAT3);
glPopMatrix();
}
if(j == 5){
glPushMatrix();
glTranslatef(31 * -0.4, -9, -9);
glCallList(REPEAT1);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * -.2, -3, -9);
glCallList(REPEAT2);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * 0.0, 3, -9);
glCallList(REPEAT3);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * 0.2, 9, -9);
glCallList(REPEAT4);
glPopMatrix();
}
if(j == 6){
glPushMatrix();
glTranslatef(31 * -0.4, -9, -9);
glCallList(REPEAT1);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * -.2, -3, -9);
glCallList(REPEAT2);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * 0.0, 3, -9);
glCallList(REPEAT3);
glPopMatrix();
glPushMatrix();
glTranslatef(31 * 0.2, 9, -9);
glCallList(REPEAT4);
glPopMatrix();
glTranslatef(31 * 0.4, 15, -9);
glCallList(REPEAT5);
glPopMatrix();
}
}
break;
}
}
void display(void)
{
int i, j;
GLfloat xPos = -0.4,yPos=-.5;
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(90.0, 0.0, 1.0, 0.0);
if(j == 1){
extrudeSolidFromPolygon(letterS, sizeof(letterS),
width, S_SIDE,S_EDGE, S_WHOLE);
glCallList(S_WHOLE);
}
if(j == 2){
extrudeSolidFromPolygon(letterJ, sizeof(letterJ),
width, J_SIDE,J_EDGE, J_WHOLE);
glCallList(J_WHOLE);
}
if(j == 3){
extrudeSolidFromPolygon(letterC, sizeof(letterC),
width, C_SIDE,C_EDGE, C_WHOLE);
glCallList(C_WHOLE);
}
if(j == 4){
extrudeSolidFromPolygon(letterI, sizeof(letterI),
width, I_SIDE,I_EDGE, I_WHOLE);
glCallList(I_WHOLE);
}
if(j == 5){
extrudeSolidFromPolygon(letterT, sizeof(letterT),
width, T_SIDE,T_EDGE, T_WHOLE);
glCallList(T_WHOLE);
}
glutSwapBuffers();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
width = width + 0.1;
glPopMatrix();
}
for(i = 0; i < 45 ; i++){
glPushMatrix();
repeat(j);
glPopMatrix();
glPushMatrix();
glRotatef(90.0 - (2.0 * i), 0.0, 1.0, 0.0);
if(j == 1){
glCallList(S_WHOLE);
}
if(j == 2){
glCallList(J_WHOLE);
}
if(j == 3){
glCallList(C_WHOLE);
}
if(j == 4){
glCallList(I_WHOLE);
}
if(j == 5){
glCallList(T_WHOLE);
}
glutSwapBuffers();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPopMatrix();
}
for(i = 1; i < 32 ; i++){
glPushMatrix();
repeat(j);
glPopMatrix();
glPushMatrix();
if(pos==1)
glTranslatef(i * xPos, i * 0.3, i * -0.3);
else if(pos==2)
glTranslatef(i * xPos, i * -0.3, i * -0.3);
else if(pos==3)
glTranslatef(i * xPos, i * xPos, i * -0.3);
else if(pos==4)
glTranslatef(i * xPos, i * -xPos, i * -0.3);
else if(pos==5)
glTranslatef(i * -0.5, i * -yPos, i * -0.3);
else if(pos==6)
glTranslatef(i * 0.5, i * -yPos, i * -0.3);
if(j == 1){
glCallList(S_WHOLE);
}
if(j == 2){
glCallList(J_WHOLE);
}
if(j == 3){
glCallList(C_WHOLE);
}
if(j == 4){
glCallList(I_WHOLE);
}
if(j == 5){
glCallList(T_WHOLE);
}
glutSwapBuffers();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPopMatrix();
}
if(pos==5 || pos==6)
yPos+=0.32;
else
xPos = xPos + 0.2;
}
glFlush();
}