martes, 13 de noviembre de 2007

Letras Star Wars

Este es el programa que simula la presentacion de las letras tipo star wars

#include "GL/glut.h"
#include "string.h"
#include

char etiqueta[80];

static int angulo=0,angulo2=180,trasladarx=0,trasladary=0,trasladarz=0;
static float escalax=0.5,escalay=0.5,escalaz=0.5;

void Escribe (char *cadena)
{
unsigned int Nletras;
//glTranslatef(0,0,0);
glScalef(0.1,0.1,0.1);
for (Nletras=0; Nletras{
glLineWidth(1.0);
glutStrokeCharacter(GLUT_STROKE_ROMAN, cadena[Nletras]);
}
}

void texto(void)
{
char *nombre="Eduardo Ademir Hernandez Garcia";
char *numeroCuenta="301594679";

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode( GL_MODELVIEW_MATRIX );
glLoadIdentity();
glColor3f(1.0, 1.0, 1.0);
glPushMatrix();
glTranslatef(trasladarx,trasladary,trasladarz);
glScalef(escalax,escalay,escalaz);
glRotatef(angulo,0,0,1);
glRotatef(65.3,1,0,0);
glRasterPos3f(0,0,0);
Escribe(nombre);
glPopMatrix();

glPushMatrix();
glTranslatef(0,-7,0);
glTranslatef(trasladarx,trasladary,0);
glScalef(escalax,escalay,escalaz);
glRotatef(angulo,0,0,1);
glRasterPos3f(0,0,0);
Escribe(numeroCuenta);
glPopMatrix();

glPushMatrix();

glTranslatef (0.0, -2.0, -10.0);
glRotatef(-45.0, 0.0, 1.0, 0.0);
glRotatef(-45.0, 1.0, 0.0, 0.0);
glutSolidTorus (0.3, 0.8, 12, 24);
//glutSolidSphere (0.5,24,16);
//glutWireSphere(1.2,200,198);
glPopMatrix();

/* Aquí tratamos la línea leída */
//}

//glPopMatrix();
glFlush();
}

void reshape(int w, int h)
{
if (!h)
return;
glViewport(0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-30, 75, -30, 35, -200, 100);
//Tengo la matriz de proyección limpia, pero ahora tengo que decirle a OpenGL de que manera quiero
//que proyecte mis gráficos en la ventana que he creado. Usaremos la función glOrtho(...). Así creo el
//volumen de visualización. Todo lo que esté dentro de este volumen será proyectado de la forma más simple,
//eliminando su coordenada Z, o de profundidad. Es la llamada proyección ortográfica y no permite que se
//distinga la distancia de los objetos a la cámara
gluLookAt(5.0, 0.0, 5.0,0.0, 0.0, 0.0,0.0, 1.0, 0.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}

void keyboard (unsigned char key, int x, int y)
{
switch (key)
{
case ' ':
angulo=angulo+45;
glutPostRedisplay();
break;
default:
break;
case 'a':
angulo=angulo-45;
glutPostRedisplay();
break;
case 27:
exit (0);
break;
case 'r':
angulo=0;
angulo2=180;
trasladarx=0;
trasladary=0;
escalax=0.5;
escalay=0.5;
escalaz=0.5;
glutPostRedisplay();
break;
case 'R':
angulo=0;
angulo2=180;
trasladarx=0;
trasladary=0;
escalax=0.5;
escalay=0.5;
escalaz=0.5;
glutPostRedisplay();
break;
case 's':
trasladarz=trasladarz+5;
trasladary=trasladary+1;
escalax=escalax/1.1;
escalay=escalay/1.1;
escalaz=escalaz/1.1;
glutPostRedisplay();
break;
}
glutSwapBuffers();
}

void buttonPress(int button,int state,int x,int y)
{
if(state == GLUT_DOWN)
{
switch(button)
{
case GLUT_LEFT_BUTTON:
escalax=escalax/2;
escalay=escalay/2;
escalaz=escalaz/2;
break;

case GLUT_RIGHT_BUTTON:
trasladarx++;
trasladary++;
break;

default:
break;
}
}
glutPostRedisplay();
glutSwapBuffers();
}

int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutInitWindowSize(700,620);
glutInitWindowPosition(0, 0);
glutCreateWindow("Cadenas Dibujadas");

glutDisplayFunc(texto);
glutIdleFunc(keyboard);
glutKeyboardFunc ( keyboard);
glutMouseFunc ( buttonPress );
glutReshapeFunc(reshape);

glutMainLoop();
return 0;
}

No hay comentarios: