Você está na página 1de 12

UNIVERSIDAD DEL ISTMO

MATERIA: GRAFICACIN POR COMPUTADORA TTULO: PROYECTO: PINBALL EN 3D CATEDRATICA: M.R. YARA PEREZ MALDONADO ALUMNO: VILLALOBOS ORTIZ SALVADOR GRUPO: 504

TEHUANTEPEC OAXACA A 17 DE FEBRERO DE 2014


1

NDICE

1.- Resumen 2.-Introduccin 3.-Marco Terico 4.- Desarrollo 5.-Resultado 6.- Conclusin 7.- Bibliografa 8.-Anexo 8.1.- Manual de Usuario 8.2 Requerimientos Tcnicos

3 3 4 8 9 9 10 10 10 12

1.-RESUMEN
Este documento es referente a la creacin de un juego llamado Pinball en tercera dimensin utilizamos la librera de OpenGL para crearlo junto con instrucciones de la misma librera. El juego consta de una pelota que es la encargada de destruir los bloques o cubos de color azul y tiene una tabla de color rojo la cual permite que la pelota no se pierda en el escenario y en la cual la pelota rebota.

Figura 1

2.- INTRODUCCIN
Este juego se observan unos cuadros de color azul que son los que se tienen que destruir para poder ganar el juego la pelota es la encargada de destruirlos, los cuadros de color azul fueron creados con una clase llama cubo y creamos 4; la lgica del juego consiste en que si la posicin de la pelota en x e y son iguales a la posiciones x e y del cubo. La misma comparacin se realiza para la pelota y la tabla. Es un solo escenario el que se muestra en la figura (1), tambin cuenta con una rejilla de color azul la cual tambin se cre con la librera de OpenGL. Si con la tabla no se captura la pelota entonces se pierde el juego, la tabla se mueve un solo eje existe una condicin que permite determina la colisin y la nueva direccin de la pelota.
3

3.- MARCO TERICO La estructura del juego y las funciones de OpenGL que se utilizaron son: Esta son las inicializaciones del juego y las funciones para el teclado y una funcin del tiempo. glutInitWindowSize(1000, 600);//inicializacin de la pantalla glutKeyboardFunc(keyboard_normal);//para utilizar las teclas normales glutSpecialFunc (especial);//para utilizar las teclas especiales GlutTimerFunc(ms,Avanzar2,1);//funcin de tiempo para el movimiento de la pelota Definimos los parmetros y variables que se necesitan para la creacin de la grilla azul. GLfloat elevacion = -30.0f; GLfloat azimitud = 0.0f; GLfloat giro = 0.0f; GLfloat distancia = 25.0f; #define DEF_floorGridScale 1.0 #define DEF_floorGridXSteps10.0 #define DEF_floorGridZSteps 10.0 GLfloat zExtent, xExtent, xLocal, zLocal; int loopX, loopZ; void grilla(void); La creacin dela grilla. void grilla(void) { //Dibujando la Grilla glPushMatrix(); glPushAttrib( GL_LIGHTING_BIT ); glDisable( GL_LIGHTING ); glColor3f( 0.0, 0.0, 1.0 );//color azul de la grilla glBegin( GL_LINES ); zExtent = DEF_floorGridScale * DEF_floorGridZSteps; for(loopX = (-DEF_floorGridXSteps); loopX < (DEF_floorGridXSteps-0.5); loopX++ ) { xLocal = DEF_floorGridScale * loopX; glVertex3f( (xLocal+0.5), 0.0, (-zExtent+0.5) ); glVertex3f( (xLocal+0.5), 0.0, (zExtent-0.5) ); } xExtent = (DEF_floorGridScale) * (DEF_floorGridXSteps); for(loopZ = -DEF_floorGridZSteps; loopZ < DEF_floorGridZSteps; loopZ++ )
4

{ zLocal = DEF_floorGridScale * loopZ; glVertex3f( -xExtent+0.5, 0.0, zLocal+0.5); glVertex3f( xExtent-0.5, 0.0, zLocal+0.5 ); } glEnd(); glPopAttrib(); glPopMatrix(); } Con el mtodo de la clase cubo llamada crearcubo crearemos los cubos en existen 4 partes o cuatro arreglo de 10 objetos del tipo de la clase cubo con la cual se logra la proyeccin de los cubos. class cubo { public: void crearcubo(int x,int y,int i,int color); private: int valor,valor2,x,y,i; int arreglox[20],arregloy[20]; }; Esta es la clase cubo despus declararemos 4 arreglo de los objetos de tipo clase cubo cubo1[10]; cubo cubo2[10]; cubo cubo3[10]; cubo cubo4[10]; Mediante el mtodo crearcubo creamos los cubos azules que se van a destruir void cubo::crearcubo(int x,int y,int i,int color) { GLfloat mat_ambient_cubo[] = {0.1, 0.1, 0.1, 1.0f}; GLfloat mat_diffuse_cubo[] = {0.0, 0.0, color, 1.0f}; GLfloat mat_specular_cubo[] = {0.9, 0.9, 0.9, 1.0f}; glMaterialfv (GL_FRONT, GL_AMBIENT, mat_ambient_cubo); glMaterialfv (GL_FRONT, GL_DIFFUSE, mat_diffuse_cubo); glMaterialfv (GL_FRONT, GL_SPECULAR, mat_specular_cubo); glMaterialf (GL_FRONT, GL_SHININESS, 100.0f); glPushMatrix (); glTranslatef (x, 0.5, y);//k=arriba,vary=enfrente,i=lados glutSolidCube(1); glPopMatrix(); }
5

Con la funcin Avanzar2 determinamos el movimiento de la pelota nos vimos en la necesidad de utilizar funciones de la librera math.h para poder convertir en entero la posicin de la pelota debido a que la probabilidad de que la posicin de la pelota fuera igual que la tabla o un cubo determinado era mnima y redondendola o convirtindola a un entero se consigue la igualdad en ciertos casos. void Avanzar2(int value) { xpos = xpos + avx; ypos = ypos + avy; if(xpos+0.5f>(9.0f)) { avx = -avx; xpos = xpos + avx; } if(xpos-0.5f<-(9.0f)){ avx = -avx; xpos = xpos + avx; } if((ypos+0.5f>(8.5f) && floor(xpos)==p1) || (ypos+0.5f>(8.5f) && floor(xpos)==p2)) { avy = -avy; ypos = ypos + avy; avx = -avx; xpos = xpos + avx; } if((ypos+0.5f>(8.5f) && floor(xpos)==p3) || (ypos+0.5f>(8.5f) && floor(xpos)==p4)) { avy = -avy; ypos = ypos + avy; xpos = xpos + avx; } if(ypos-0.5f<-(9.0)){ avy = -avy; ypos = ypos + avy; } if((ypos+0.5f)>11.0f) { printf("\nFIN DEL JUEGO\n"); system("pause"); exit(0); }
6

if (acelera) ms++; else ms--; if (ms>0 || ms<4) acelera = !acelera; glutTimerFunc(ms,Avanzar2,6); glutPostRedisplay(); } Con esta funcin se llamara al de crear cubos y tambin verificamos si coincide con la posicin de la pelota de ser ese caso modificamos el valor del vector en x y el vector en y, si eso sucede se reescribe el vector para pintarlo en otro lugar y modificamos el mtodo de crearcubo para poder cambiar el color del cubo. void modificarcubos(void){ int j=0; for(int i=-7;i<=1;i++) { color=1.0; vectorx1[i+7]=valx+i; vextor1y[i+7]=valy+i; if(floor(xpos)==(vectorx1[i+7]) && floor(ypos)==(vextor1y[i+7])) { vectorx1[i+7]=valx+i; vectorx1[i+7]=valy+i; for(j=i;j<=0;j++) { vectorx1[j]=20; var1=vectorx1[j+1]; vectorx1[j+1]=vectorx1[j]; vectorx1[j]=var1; } color=0.0f; avx = -avx; xpos = xpos + avx; printf(" \n val x :%d valy : %d",vectorx1[i+9],vextor1y[i+9]); } cubo1[i].crearcubo(vectorx1[i+7],vextor1y[i+7],i,color); } } Al final para poder mostrar todo lo que se ha creado necesitamos la funcin de display en la cual se visualizara el juego. void display (void) { glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
7

glMatrixMode( GL_MODELVIEW_MATRIX ); glLoadIdentity(); polarView(distancia, giro, elevacion, azimitud); grilla();//funcion grilla esfera(); tabla(); //crearcubo2(); modificarcubos(); modificarcubos2(); modificarcubos3(); modificarcubos4(); glFlush (); glutSwapBuffers(); } Con esto terminamos de describir el cdigo que se utiliz para la creacin del juego. 4.- DESARROLLO El juego fue difcil de construir debido al movimiento de la pelota en los dos ejes el cual toma valores reales y por la necesidad de la implementacin de una funcin de tiempo para que se visualizara el efecto de movimiento las funciones de bastante importancia son glutTimerFunc(ms,Avanzar2,6); y glutPostRedisplay();[3]. Con estas dos podemos permitir el movimiento y podemos repintar la pantalla casi al instante eso sucede en milisegundo y por lo tanto el efecto del repintado no se ve pero si sucede dentro de la maquina La posicin de la pelota se obtuvo mediante unas variables las cuales cambian rpidamente avx = 0.05f;avy = 0.05f; xpos = -5.0f; ypos = 4.0f; ypos y xpos son variables globales por lo tanto se pueden ocupar en cualquier parte del cdigo su valor cambia rpidamente para poder realizar el movimiento de la pelota y con estos valores comparamos para poder realizar la eliminacin de los cubos. Tambin existen otras funciones para poder utilizar las teclas normales glutKeyboardFunc(keyboard_normal) y las teclas especiales glutSpecialFunc (especial); con las cuales movemos la tabla con la tecla A,a,D,d podemos movernos de izquierda a derecha y con las teclas arriba, abajo, movemos la perspectiva para acercar o alejar la imagen y con las teclas de izquierda y derecha.

Las posiciones que tomara la tabla se asignan variables p1 = -2.0f; p2 = -1.0f; p3 = 0.0f; p4 = 1.0f; las cuales cambian conforme al movimiento de la misma, conforme se hace realiza un movimiento van cambiando su valor; y en determinado que la posicin de nuestra tabla coincida con la pelota la direccin de la pelota cambiara y tomara otra direccin. El desarrollo del juego fue implementado pero al momento de que la pelota encuentra un cubo si lo reconoce y se desva pero no puede desaparecer debido a la funcin glutPostRedisplay(); ya que esta repinta en cada momento la pantalla y a pesar de que la funcin crear cubo es solo llamada una vez el cambio de color del cubo y de posicin solo se ve al momento de la colisin, el llamado a la funcin se hace mediante un ciclo for para poder crear cubo a cubo y cuando las posiciones son iguales se reasigna un nuevo valor a la posicin en x y en y pero como la funcin glutPostRedisplay(); manda a pintar de nuevo los valores se reestablecen los valores de los vectores de posicin en x e y, por lo tanto no se consigue el borrado del cubo y sucede lo mismo con las dems funciones con las cuales se crearon los dems cubos. Para la pelota tena que delimitar cada accin que tomara en cada colisin como moverse hacia la izquierda o derecha arriba o abajo dependiendo de la posicin donde golpeara un cuadro y esa accin no la pude realizar ya que el valor de las posicin de x e y varia con cada colisin que ocurra.
5.- RESULTADOS OBTENIDOS

Los resultados no son favorables ya que no se obtuvo lo que se esperaba del programa pero es por el movimiento de la pelota y el cambio constante que se realiza con la funcin de repintar porque se ven los cambios al momento de la colisin y se modifican los vectores de posicin pero despus de eso los valores se reestablecen conforme el momento de creacin y el efecto de borrar el cubo no se ve. La parte grafica que se realizo es la creacin de los cubos con mtodos de una clase llamada cubo se crearon arreglos de objetos para poder dibujarlos se implementa el mtodo de crearcubo cada que se requiera crear uno. La pelota fue creada mediante unas funciones de OpenGL predefinidas que permiten la creacin de esferas y tambin cubos y otras figuras en tercera dimensin. La tabla est conformada por cuatro cubos los cuales cambian de posicin en un solo eje y este es el que necesitamos para la comparacin de la colisin con la pelota. El movimiento de la pelota se hace mediante una funcin llamada Avanzar2 la cual en cada movimiento o colisin se ve afectada o es solicitada para realizar cambios de direccin de la misma. 6.- CONCLUSIONES La creacin de los objetos no fue problema pero si la implementacin de la funcin que se encargara de borrar los cubos.

Lo complicado del juego fueron las colisiones y decidir qu direccin debera tomar la pelota despus de una colisin fue la que me cost demasiados problemas y el no entender al 100% como se utilizan las clases y otros conocimientos que me hacen falta. El juego me cost ms trabajo de lo que pens y tal vez si le hubiera dedicado ms tiempo y empeo lo habra implementado de mejor manera y sera ms eficiente. En general el conocimiento que tengo para crear este juego considero que es muy poco y tena que delimitar cada accin que tomara la pelota. 7.- BIBLIOGRAFIA [1]
http://www.lcc.uma.es/~lopez/lp2/apuntes/04-objetos/objetos.pdf

[2]

http://www.jlmarina.net/metodos2/MET2_07_16-

Creacion_Dinamica_de_Objetos.pdf [3] http://opengl-esp.superforo.net/t18-tutorial-ii3-gluttimerfunc

[4]

http://www.opengl3d.org

[5] http://www.lawebdelprogramador.com/foros/Open_GL/1221664Como_instalar_OpenGL.html [6] http://mycodelog.com/2010/05/15/gllibs/ [7] http://my3dmath.com/instalar-opengl-en-visual-studio-c-2010/

8.- ANEXO 8.1.- MANUAL DE USUARIO Para mover las piezas se utilizan las teclas normales, las cuales desplazan la tabla en la cual rebota la pelota para poder seguir jugando, tambin cuenta con las teclas especiales que sirven para desplazarles haca en frente y hacia la atrs en el eje Y, y para girar el escenario con las teclas a la izquierda y a la derecha. Tecla A-a: Mueve la tabla en direccin izquierda. Tecla D-d: Mueve la tabla en direccin derecha. Para realizar las rotaciones, los acercamientos y alejamientos se ocupan las siguientes teclas: Tecla hacia arriba: Transporta el escenario hacia la parte de adelante en la coordenada Y positiva. Tecla hacia abajo: Transporta el escenario hacia la parte de atrs en la coordenada Y negativa. 10

Tecla izquierda y derecha: rotan el escenario para poder verlo desde otra perspectiva.

Esta es la pantalla del juego sin cubos imagen [3]

Imagen 3 Esta con la mitad de los cubos imagen [5]

Imagen 5 Y esta imagen es con todos los cubos imagen [4]

Imagen 4 11

8.2.- Requerimientos tcnicos Se necesitan libreras para poder ejecutar la aplicacin : Opengl32.lib,glu32.lib,glut.lib las cuales se puedes descargar de la pgina oficial de OpenGL [4] la cuales se agregan en la carpeta C:\Program Files\Microsoft Visual Studio 11.0\VC\lib esto es para las extensiones .lib Para las extensiones opengl32.dll, glut32.dll y glu32.dll la direccin es windows\system Para los encabezados o libreras .h glut.h, GLU.h la direccin es C:\Program Files\Microsoft Visual Studio 10.0\VC\include\GL Todos estos archivos los consegu de la pgina [6] Despus tendremos que indicar las nuevas libreras, en donde al crear un archivo, en las opciones nos dirigimos a Proyecto > Propiedades de "Nombre" > Vinculacin > Propiedades de configuracin > Entrada > Dependencias adicionales > Edit En [7] podemos observar mejor la informacin y un ejemplo sencillo de una aplicacin hecha en OpenGL.

12

Você também pode gostar