martes, 25 de septiembre de 2007

Reporte Práctica 5

1.- ¿Que es diseño orientado a objetos?
R: Es el diseño de aplicaciones en las que el flujo de los procesos es determinado por acciones del usuario o mensajes generados por otros programas.

2.-¿Que utilidad tiene el manejo de eventos en el desarrollo de aplicaciones gráficas?
R: Nos permite recibir en tiempo real retroalimentación visual a la cual el usuario responderá con otros eventos. Esto es importante ya que generalmente en el ambiente gráfico el usuario está en constante interacción con este tipo de eventos.

3.- Escriba un programa en el cual:
-al hacer click en la ventana se toman las coordenadas del mouse y se dibuja un punto.
-cada dos puntos acumulados dibuja una línea.
-cada tres puntos acumulados dibuja un triángulo.
-cada cuatro puncumulados dibuje un cuadrlátero.
-cada cinco puntos acumulados dibuje un polígono.
-el botón izquierdo del mouse limpia la ventana.

#include
#include
#define maxVer 10

typedef struct { float x; float y; }vertice;
vertice Vertices[maxVer];
static int contador = 0;
static int i,j,k;

void display(void) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
for(i = 0; i <= contador; i++){
glColor3f(0.0,1.0,0.0);
glPointSize( 15 );
glBegin(GL_POINTS);
glVertex2f(Vertices[i].x,Vertices[i].y);
glEnd();
}
if(contador > 0) {
glColor3f(0.0,0.5,0.8);
glLineWidth(5.0);
glBegin(GL_LINE_LOOP);
for(j = 0; j <= contador; j++) {
glVertex2f(Vertices[j].x,Vertices[j].y);
}
glEnd();
}
glPopMatrix();
glutSwapBuffers();
}
void guia(int x,int y){
if(contador < maxVer)
{
Vertices[contador].x = x;
Vertices[contador].y = k-y;
glutPostRedisplay();
}}
void idle(void) {
glutPostRedisplay();
}
void mouse(int boton,int estado,int x,int y) {
if(estado == GLUT_DOWN) {
switch(boton) {
case GLUT_LEFT_BUTTON:
if(contador < maxVer) {
Vertices[contador].x = x;
Vertices[contador].y = k-y;
contador++;
Vertices[contador].x = x;
Vertices[contador].y = k-y;
glutPostRedisplay();
}
break;
case GLUT_RIGHT_BUTTON:
contador = 0;
i=0;
Vertices[contador].x = x;
Vertices[contador].y = k-y;
glutPostRedisplay();
break;
}}}

void reshape ( int width , int height ) {
if (height==0) {
height=1;
}
k = height;
glViewport(0,0,width,height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, width, 0,height,-10,10);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void init(){
glClearColor(0.5f, 0.7f, 0.9f, 1.0f);
}
int main( int argc, char** argv ) {
glutInit(&argc,argv);
glutInitDisplayMode( GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH );
glutInitWindowSize(600,600);
glutInitWindowPosition(400,100);
glutCreateWindow("Dibujo de puntos, líneas, triángulos, cuadrados y polígonos" );
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMouseFunc(mouse);
glutPassiveMotionFunc(guia);
glutIdleFunc(idle);
glutMainLoop();
return 0;
}





No hay comentarios: