0% found this document useful (0 votes)
47 views14 pages

Moving Words

The document defines constants and variables for generating 3D letter shapes in OpenGL. It includes arrays defining the vertex coordinates for letters S, J, C, I, and T. Functions are defined to initialize lighting, zero out the text positions, extrude polygons into solid shapes from the vertex data, and repeat solid shapes in a sequence. The repeat function uses push/pop matrix and translation to replicate display lists for the letters at different positions.

Uploaded by

vennar_mur
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
47 views14 pages

Moving Words

The document defines constants and variables for generating 3D letter shapes in OpenGL. It includes arrays defining the vertex coordinates for letters S, J, C, I, and T. Functions are defined to initialize lighting, zero out the text positions, extrude polygons into solid shapes from the vertex data, and repeat solid shapes in a sequence. The repeat function uses push/pop matrix and translation to replicate display lists for the letters at different positions.

Uploaded by

vennar_mur
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 14

#include <stdlib.

h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <glut.h>

typedef enum {RESERVED, S_SIDE, S_EDGE, S_WHOLE, J_SIDE, J_EDGE, J_WHOLE,


C_SIDE, C_EDGE, C_WHOLE,I_SIDE,I_EDGE,I_WHOLE, T_SIDE, T_EDGE, T_WHOLE,REPEAT_SIDE,
REPEAT_EDGE, REPEAT1,
REPEAT2_SIDE, REPEAT2_EDGE,REPEAT2, REPEAT3_SIDE, REPEAT3_EDGE,REPEAT3,
REPEAT4_SIDE, REPEAT4_EDGE,REPEAT4,REPEAT5_SIDE, REPEAT5_EDGE,REPEAT5} displayLists;

GLfloat sideColor[] = {0.0, 0.0, 0.5, 1.0};


GLfloat edgeColor[] = {0.7, 0.7, 0.0, 1.0};
GLfloat shininess[] = {128.0};
GLfloat mat_specular[] = {0.7, 0.7, 0.7, 1.0};

GLfloat width = 0.0;


GLfloat width2 = 1.0;
int pos=1;

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;

GLfloat light_ambient[] = { 1.0, 1.0, 1.0, 1.0 };


GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat light_position[] = { 0.0, 0.0, 0.0, 1.0 };
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);

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);

/* Zero position of text */


for(i = 0; i < count1; i++) {
letterS[i][1] = letterS[i][1] - 3.175;
}
for(i = 0; i < count2; i++) {
letterJ[i][1] = letterJ[i][1] - 3.175;
}
for(i = 0; i < count3; i++) {
letterC[i][1] = letterC[i][1] - 3.175;
}
for(i = 0; i < count4; i++) {
letterI[i][1] = letterI[i][1] - 3.175;
}
for(i = 0; i < count5; i++) {
letterT[i][1] = letterT[i][1] - 3.175;
}
}

void extrudeSolidFromPolygon(GLfloat data[][3], unsigned int dataSize,


GLdouble thickness, GLuint side, GLuint edge, GLuint whole)
{
GLdouble vertex[3], dx, dy, len;
int i, k;
int flag = 0;
int count = dataSize / (3 * sizeof(GLfloat));
static GLUtriangulatorObj *tobj = NULL;

if (tobj == NULL) {
tobj = gluNewTess();

gluTessCallback(tobj, GLU_BEGIN, glBegin);


gluTessCallback(tobj, GLU_VERTEX, glVertex3fv);
gluTessCallback(tobj, GLU_END, glEnd);
}
glNewList(side, GL_COMPILE);
glShadeModel(GL_SMOOTH);
gluBeginPolygon(tobj);
for(i = 0; i < count; i++)
{
if (data[i][2] > 1000.0) {
data[i][2] = 0.0;
flag = 1; k = i;
gluNextContour(tobj, GLU_INTERIOR);
}

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);

glMaterialfv(GL_FRONT, GL_DIFFUSE, edgeColor);


glMaterialfv(GL_FRONT, GL_SHININESS, shininess);
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);

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);

glMaterialfv(GL_FRONT, GL_DIFFUSE, sideColor);


glMaterialfv(GL_FRONT, GL_SHININESS, shininess);
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);

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);

glTranslatef(0.0, 0.0, -10.0);

extrudeSolidFromPolygon(letterS, sizeof(letterS), width2, REPEAT_SIDE,


REPEAT_EDGE, REPEAT1);
extrudeSolidFromPolygon(letterJ, sizeof(letterJ), width2, REPEAT2_SIDE,
REPEAT2_EDGE, REPEAT2);
extrudeSolidFromPolygon(letterC, sizeof(letterC), width2, REPEAT3_SIDE,
REPEAT3_EDGE, REPEAT3);
extrudeSolidFromPolygon(letterI, sizeof(letterI), width2, REPEAT4_SIDE,
REPEAT4_EDGE, REPEAT4);
extrudeSolidFromPolygon(letterT, sizeof(letterT), width2, REPEAT5_SIDE,
REPEAT5_EDGE, REPEAT5);

for(j = 1; j < 7; j++){


width = 0.0;

for(i = 0; i < 10; i++){


glPushMatrix();
repeat(j);
glPopMatrix();

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();
}

void myReshape(int w, int h)


{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if(pos==5 || pos==6)
glFrustum(-10.0, 10.0, -10.0, 10.0, 6.0, 20.0);
else
{
glLoadIdentity();
glFrustum(-7.0, 7.0, -7.0, 7.0, 6.0, 20.0);
}
glMatrixMode(GL_MODELVIEW);
}

void mainmenu(int num)


{
if(num==0)
pos=1;
else if(num==1) pos=2;
else if(num==2) pos=3;
else if(num==3) pos=4;
else if(num==4) pos=5;
else if(num==5) pos=6;
display();
}

void main(int argc, char** argv)


{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(1200,1200);
glutCreateWindow ("text3d");
myinit();
glutCreateMenu(mainmenu);
glutAddMenuEntry("Top",0);
glutAddMenuEntry("Bottom",1);
glutAddMenuEntry("Bottom To Top",2);
glutAddMenuEntry("Top To Bottom",3);
glutAddMenuEntry("Left",4);
glutAddMenuEntry("Right",5);
glutReshapeFunc (myReshape);
glutAttachMenu(GLUT_RIGHT_BUTTON);
glutDisplayFunc (display);
glutMainLoop();

You might also like