Вы находитесь на странице: 1из 25

LABORATORIO DE SINTESIS DE GRFICOS POR ORDENADOR Prctica 1: INTRODUCCIN A OPENGL Y SUS PRIMITIVAS.

Profesor: Santiago Hermira Anchuelo Email: santiago.hermira@uah.es

Pgina 2 de 25

INDICE

1. INTRODUCCIN A OPENGL...................................................................................................4 2. GLUT OPENGL UTILITY TOOLKIT.........................................................................................4 2.1. Gestin de Ventanas............................................................................................................4 2.2. Dis !a" Ca!!#a$%..................................................................................................................5 &. 'I PRI'ER PROGRA'A.........................................................................................................5 &.1. ANALI(I( DE LA )UNCIN 'AIN.......................................................................................* &.2. An+!isis de !a ,-n$in .es/a e01. De,ini$in de! +.ea de .2"e$$in ini$ia!..................3 &.&. An+!isis de !a ,-n$in %e"#2a.d01. E4ent2s de te$!ad2.................................................12 &.4. An+!isis de !a ,-n$in 52-se 01. E4ent2s de .atn........................................................12 4. PLANTILLA...........................................................................................................................1& 5. PRI'ITIVA( DE DI6U7O......................................................................................................14 5.1. De,ini$in de 48.ti$es.......................................................................................................15 5.2. Di#-92 de -nt2s...............................................................................................................1: 5.&. Di#-92 de !;neas..................................................................................................................1: 5.4. Di#-92 de t.i+n<-!2s..........................................................................................................1* 5.5. Di#-92 de $-ad.ad2s.........................................................................................................1* :. COLOR DE RELLENO..........................................................................................................1= *. 'ODELO DE (O'6READO.................................................................................................1= =. O67ETO( GEO'>TRICO( &D..............................................................................................2? 3. DE(ARROLLO DE LA PR@CTICA.......................................................................................21 3.1. De,ini$in de! e9e de $22.denadas..................................................................................21 3.2. Di#-92 de -n $-#2 s!id2.................................................................................................21 3.&. Di#-92 de t2.2 " es,e.a......................................................................................................22 3.4. Asi<na$in de $2!2.es e inte.$e ta$in de e4ent2s de te$!ad2....................................2& 3.5. Inte.$e ta$in de e4ent2s de .atn..................................................................................2& 3.:. P!ani,i$a$in......................................................................................................................25 3.*. E4a!-a$in de !a .+$ti$a.................................................................................................25 1?. 6I6LIOGRA)AA....................................................................................................................25 1?.1. Li#.2sB...............................................................................................................................25 1?.2. URLB...................................................................................................................................25

Pgina & de 25

1.

INTR D!CCI"N A

PEN#$.

OpenGL es un interfaz software para hardware grfico. Este interfaz consiste en alrededor de 150 comandos que se usan para especificar los ob etos ! las operaciones necesarias para producir una aplicaci"n interacti#a en $ dimensiones. OpenGL es una interfase independiente del hardware% lo que hace que ha!a sido implementado por muchas plataformas &'ni(% )indows% ..*. +ara conseguir esta independencia ,)% OpenGL no dispone de comandos para realizar #entanas o para obtener entradas del usuario% estas funciones son realizadas por aplicaciones dependientes de ,). OpenGL% no dispone de modelos comple os para definir ob etos de tres dimensiones &autom"#iles% cuerpos% a#iones%..*. -on OpenGL% si se requiere construir un ob eto comple o% es necesario crearlo a partir de primiti#as geom.tricas &puntos% l/neas% pol/gonos*. 0ntes de continuar con OpenGL% es necesario conocer un termino importante 1rendering2% que es el proceso por el cual una computadora crea imgenes a partir de modelos. Estos modelos% u ob etos% son construidos a partir de primiti#as geom.tricas &puntos% l/neas ! pol/gonos* que son especificados mediante #.rtices. %. #$!T PEN#$ !TI$IT& T $'IT

-omo !a hemos comentado% OpenGL esta dise3ado para ser independiente del ,) ! del 4.O% por lo que aunque es capaz de realizar 1rendering2% no es capaz de gestionar #entanas% o leer e#entos !a sean del teclado o del rat"n. +ara solucionarlo surge GL'5% que es el encargado de realizar la gesti"n de #entanas% e#entos% 6 dependiente del sistema operati#o. 0l igual que GL'5% e(isten otras 1tool7its2 que tienen una funcionalidad parecida% por e emplo GL0'8. La funcionalidad de las funciones de GL'5 se puede di#idir en dos apartados% %.1. Gesti"n de 9entanas. :ispla! -allbac7. #esti(n )e *entanas

E(isten 5 funciones que realizan las tareas necesarias para inicializar una #entana% a continuaci"n se presentan%

glutInit &int ;argc% char ;;arg#* Esta funci"n inicializa GL'5 ! procesa la l/nea de comandos &para 8<)indows*. Esta funci"n debe ser in#ocada antes que cualquier otra funci"n de GL'5.

glutInitDis+la,-o)e &unsigned int mode*

Pgina 4 de 25

Especifica que caracter/sticas se utilizaran a la hora de representar la imagen en pantalla% el buffer de profundidad% el formato del color% doble buffer%6 conceptos estos que iremos aprendiendo a lo largo de las prcticas. 'n e emplo de utilizaci"n ser/a glutInitDis+la,-o)e &GL'5=:O'>LE ? GL'5=@G> ? GL'5=:E+5,*.

glutInit.in)o/Position &int (m int !* Especifica la posici"n de la #entana desde la esquina superior izquierda de la pantalla en pi(els.

glutInit.in)o/Si0e &int winth% int size* Especifica el tama3o en pi(els de la #entana

glutCreate.in)o/ &char ;string* Esta funci"n crea una #entana con un t/tulo. Esta funci"n de#uel#e un Anico identificador por #entana% aunque la #entana no es presentada hasta que se e ecuta la funci"n glut-ain$oo+ &*.

%.%.

Dis+la, Call1ac2.

glutDis+la,3unc &#oid &;fun.*&** Especifica el c"digo a e ecutar cuando se produce un e#ento de OpenGL. +or lo tanto% todas las rutinas que modifican la pantalla% han de colocarse en la funci"n que es in#ocada por glut:ispla!Bunc &*.

glut-ain$oo+ &* Es la Altima funci"n a in#ocar en un programa OpenGL. -uando se llama a esta funci"n% todas las funciones que han sido creadas% se presentan en pantalla. 0 partir de este punto comienza el procesado de e#entos ! se dispara la funci"n in#ocada por glutDis+la,3unc&* una #ez e ecutado el bucle% este nunca termina.

4.

-I PRI-ER PR #RA-A.

Este primer programa muestra un e emplo sencillo de la aplicaci"n ! funcionalidad de OpenGL. El c"digo de 1e emplo1.c2 abre una #entana ! dibu a dentro un tringulo en blanco. C; e emplo1.c +rimer programa de OpenGL ;C #include <GL/glut.h> #include <stdio.h> #include <stdlib.h> void init ( void ) { glEnable ( GL_DEPT _TE!T )" gl#lea$#olo$ ( %.%& %.%& %.%& %.% )" ' void dis(la) ( void )
Pgina 5 de 25

{ gl#lea$ ( GL_#*L*+_,-..E+_,/T 0 GL_DEPT _,-..E+_,/T )" glPush1at$i2 ( )" gl#olo$34 ( 5.%& 5.%& 5.%& 5.% )" glT$anslate4(%.%& %.%& 63.%)" gl,egin(GL_T+/78GLE!)" gl9e$te2:4( %.%4& 5.%4& %.%4)" gl9e$te2:4(65.%4&65.%4& %.%4)" gl9e$te2:4( 5.%4&65.%4& %.%4)" glEnd()" glPo(1at$i2 ( )" glut!;a(,u44e$s ( )" ' void $esha(e(int ;& int h) { gl9ie;(o$t ( %& %& ;& h )" gl1at$i21ode ( GL_P+*<E#T/*8 )" glLoad/dentit) ( )" i4 ( h==% ) gluPe$s(ective ( >%& ( 4loat ) ;& 5.%& ?%%%.% )" else gluPe$s(ective ( >%& ( 4loat ) ; / ( 4loat ) h& 5.%& ?%%%.% )" gl1at$i21ode ( GL_1*DEL9/E@ )" glLoad/dentit) ( )" ' void Ae)boa$d ( unsigned cha$ Ae)& int 2& int ) ) { s;itch ( Ae) ) { case BCD /E tecla de Esca(e E/ e2it ( % )" b$eaA" case F4FD glut.ull!c$een ( )" b$eaA" case F;FD glut+esha(e@indo; ( B?%&B?% )" b$eaA" de4aultD b$eaA" ' ' void Gouse ( int button& int state& int 2& int ) ) { i4 ( button == GL-T_LE.T_,-TT*8 HH state == GL-T_D*@8 ) { ($int4(I Jn!e (ulso el botKn iLMuie$do del $atKnN)" ' ' int Gain ( int a$gc& cha$EE a$gv ) { glut/nit (Ha$gc& a$gv)" glut/nitDis(la)1ode (GL-T_+G, 0 GL-T_D*-,LE 0 GL-T_DEPT )" glut/nit@indo;!iLe (B?%&B?%)" glut/nit@indo;Position (5%%&5%%)"
Pgina : de 25

glut#$eate@indo; (OP$og$aGa eP5.cO)" init ( )" glut+esha(e.unc ( $esha(e )" glutQe)boa$d.unc ( Ae)boa$d )" glut1ouse.unc (Gouse )" glutDis(la).unc ( dis(la) )" glut1ainLoo( ( )" $etu$n %" ' +ara compilar este c"digo% el comando a e ecutar ser/aD E gcc e emplo1.c Fo e emplo1 Flglut FlGL' FlGL 4.1. ANA$ISIS DE $A 3!NCI"N -AIN.

La estructura bsica de un programa de OpenGL se muestra en e emplo1.c% estructura esta que pasamos a describir. 0nalicemos en primer lugar la funci"n main56 glutGnit &Hargc% arg#*I

Esta funci"n es la encargada de inicializar GL'5% adems de realizar un anlisis de los parmetros suministrados en la l/nea de comandos. glutGnit:ispla!Jode &GL'5=@G> ? GL'5=:O'>LE ? GL'5=:E+5,*I

:efine el modo en el que se tiene que dibu ar la #entana% como en otras funciones los parmetros a utilizar se definen con bit o mscaras de bits. +ara este programa en concretoD

#$!T7R#8 indica que los colores se definirn con tres componentes &@ed% Green% >lue* #$!T7D !8$E indica que se utilizarn dos buffer para componer la imagen. #$!T7DEPTH indica que se #a a utilizar buffer de profundidad.

glutGnit)indow4ize &K50%K50*I Esta funci"n define el tama3o de la #entana e(presada en pi(els.

glutGnit)indow+osition &100%100*I Esta funci"n indica la posici"n de la esquina superior izquierda de la #entana desde la esquina superior izquierda de la pantalla. glut-reate)indow &L+rograma e emplo1.cL*I

Esta funci"n es la que propiamente crea la #entana% el parmetro es el nombre asignado a la misma.

init & *I

Pgina * de 25

En esta funci"n definida por el usuario% se inicializan parmetros propios de OpenGL antes de pasar el control del programa a GL'5. +ara el e emplo%

glEnable

& GL=:E+5,=5E45 *I

4e habilita la utilizaci"n de clculos de profundidad.

gl-lear-olor & 0.0% 0.0% 0.0% 0.0 *I 4e limpia el buffer de color ! se define por defecto el color negro.

glut:ispla!Bunc

& displa! *I

0qu/ se define el primer callbac7. La funci"n pasada como parmetro% ser llamada cada #ez que GL'5 determine que la #entana debe ser redibu ada & por e emplo% al ma(imizar% poner otras #entanas encima% ...*

glutJainLoop

& *I

Esta funci"n cede el control de flu o del programa a GL'5% que a partir de estos 1e#entos2% ir llamando a las funciones que han sido pasadas como callbac7. .! A"#i$i$ %& #a '("ci)" %i$*#a+ ,-. -omo !a hemos comentado% la funci"n )is+la,56 es la funci"n que se e ecuta cuando se produce algAn e#ento de GL'5. Esta funci"n ha de contener el c"digo de los ob etos que queremos dibu ar.

gl-lear & GL=-OLO@=>'BBE@=>G5 ? GL=:E+5,=>'BBE@=>G5 *I Esta funci"n resetea los buffer de color ! profundidad% eliminando posibles contenidos de #entanas anteriores.

gl+ushJatri( & *I En OpenGL% los clculos de rotaciones% te(turas% translaciones% se realizan mediante el clculo de matrices. Esta funci"n crea una copia de la matriz de modelado ! la empu a una posici"n la pila de matrices.

gl-olorMf &1.0% 1.0% 1.0% 1.0*I Esta funci"n especifica el color en formato @G>% el color es blanco.

gl5ranslatef & 0.0% 0.0% <M.0 *I Esta funci"n realiza una translaci"n del origen de coordenadas al punto &0%0%<M* . gl>egin&GL=5@G0NGLE4*I gl9erte($f& 0.0f% 1.0f% 0.0f*I gl9erte($f&<1.0f%<1.0f% 0.0f*I
Pgina = de 25

gl9erte($f& 1.0f%<1.0f% 0.0f*I glEnd&*I Esta estructura es la encargada de dibu ar el tringulo. gl8egin56 comienza una secuencia de #.rtices con los que se construir la primiti#a. El tipo de primiti#as #iene dado por el parmetro de gl>egin&*% en este caso GL=5@G0NGLE4 que se encarga de definir un tringulo. glEn)56 se encarga simplemente de cerrar la estructura. E(isten ms posibles parmetros de gl>egin &* para dibu ar otras primiti#as% que se #ern mas adelante. gl+opJatri( & *I 'na #ez realizadas los clculos sobre la matriz de segundo plano% se coloca esta en la cima de la pila de matrices.

glut4wap>uffers & *I Esta funci"n se encarga de intercambiar el buffer posterior con el buffer anterior% siendo necesaria porque se ha definido que se traba e con un doble buffer. La utilizaci"n de este doble buffer e#ita parpadeos en la generaci"n de la imagen. El resultado del c"digo anteriormente descrito fue

I!-st.a$in 1 T.ian<-!2.
4.%. An9lisis )e la funci(n resha+e56. Definici(n )el 9rea )e +ro,ecci(n inicial.

OpenGL% es una interfaz de dise3o grfico en $:% por lo tanto% todas las primiti#as han de ser situadas en el espacio $:. En la siguiente figura% se presenta como se modela el espacio en $:.

Pgina 3 de 25

I!-st.a$in 2 '2de!ad2 de! es a$i2 &D.

'na #ez que se ha dibu ado un ob eto en la #entana es necesario definir el rea de pro!ecci"n inicial que se desea de la figura en la #entana. +ara ello se debe manipular el rea de pro!ecci"n por medio de la funci"n callbac7 glutResha+e3unc5*. Esta funci"n callbac7 especifica que funci"n ser llamada cada #ez que la #entana sea redimensionada o mo#ida% pero tambi.n es utilizada para definir inicialmente el rea de pro!ecci"n de la figura en la #entana. Juchas de las funciones que OpenGL pone a disposici"n para definir la pro!ecci"n estn basadas en matrices de transformaci"n que% aplicadas sobre el sistema de coordenadas de la #entana% definen el punto desde donde ser obser#ada la figura. -on#iene recordar la disposici"n del sistema de coordenadas de OpenGL% en el que el e e #ertical es el O ! el e e de #isi"n por defecto es el P. La funci"n glutResha+e3unc5 reshape* debe ser incluida en el c"digo de la funci"n main&*

glut@eshapeBunc&reshape*I Esta funci"n indica la callbac7 a e ecutar cuando se realiza una redimensi"n de la #entana. 5ambi.n es utilizada para definir el rea de pro!ecci"n de la figura en la #entana.

#oid reshape&int w% int h* Q -omo toda callbac7% la funci"n reshape&* es de tipo #oid. 4e pasan como argumentos los #alores de ancho ! alto despu.s de la redimensi"n de la #entana.

gl9iewport&0% 0% w% h*I Esta funci"n indica la porci"n de #entana donde OpenGL podr dibu ar.

glJatri(Jode&GL=+@ORE-5GON*I

Pgina 1? de 25

Esta funci"n especifica la matriz de pro!ecci"n como matriz sobre la que se #an a realizar las transformaciones. OpenGL dispone de tres tipos de matrices% la matriz de pro!ecci"n &GL=+@ORE-5GON*% la matriz de modelo &GL=JO:EL9GE)* ! la matriz de te(tura &GL=5E85'@E*.

glLoadGdentit!&*I Esta funci"n carga como matriz de pro!ecci"n la matriz identidad.

glu+erspecti#e&S0.0% &GLfloat*h C &GLfloat*w% 1.0% 5000.0*I Esta funci"n opera sobre la matriz de pro!ecci"n ! define el ngulo del campo de #isi"n en sentido #ertical &en grados*% la relaci"n entre la altura ! la anchura de la figura &aspecto*% el plano ms cercano a la cmara ! el plano ms le ano de la cmara% respecti#amente. Estos dos Altimos son los planos de corte% que son los que se encargan de acotar el #olumen de #isualizaci"n por delante ! por detrs de la figura. 5odo lo que est. por delante del plano ms cercano ! todo lo que est. detrs del plano ms le ano no ser representado en la #entana.

I!-st.a$in & De,ini$in de e.s e$ti4a en O enGL.


glJatri(Jode&GL=JO:EL9GE)*I Esta funci"n especifica la matriz de modelado como matriz sobre la que se #an a realizar las transformaciones.

glLoadGdentit!&*I Esta funci"n carga como matriz de modelado la matriz identidad.

gluLoo70t&0.0% 1.0% $.0% 0.0% 0.0% 0.0% 0.0% 1.0% 0.0*I Esta funci"n tiene T parmetrosD los primeros tres representan la distancia en (% !% z de los o os del obser#adorI los siguientes tres% las coordenadas (% !% z del punto de referencia a obser#ar ! los Altimos tres% el #ector de direcci"n.

Pgina 11 de 25

4.4.

An9lisis )e la funci(n 2e,1oar)56. E:entos )e tecla)o.

El ob eti#o de este punto es el de indicar los mecanismos que nos ofrece GL'5 para interactuar con el entorno definido cuando se detecta un e#ento de teclado. 0l igual que !a hemos comentado en los puntos anteriores% esta interacci"n se realiza mediante llamadas a callbac7. La funci"n que indica a GL'5 la callbac7 a e ecutar ante un e#ento de teclado es glut'e,1oar)3unc &7e!board* que ha de ser colocada en la funci"n main&*

glutUe!boardBunc &7e!board*I Esta funci"n indica la callbac7 utilizada por GL'5 ante un e#ento de teclado. void Ae)boa$d (unsigned cha$ Ae)& int 2& int )) Esta funci"n es llamada cada #ez que se produce un e#ento de teclado% recibe como parmetros la tecla pulsada ! la posici"n del rat"n en ese instante. s;itch (Ae)) { case BCD /E tecla de Esca(e E/ e2it (%)" b$eaA" case F;FD glut+esha(e@indo; (B?%&B?%)" b$eaA" de4aultD b$eaA" ' En esta secci"n de c"digo se indica las tareas a realizar en caso de que se ha!a pulsado una tecla. En el e emplo en caso de pulsar la tecla KV &E4-* se termina la e ecuci"n del programa. En caso de que la tecla pulsada fuera 1w2% se redimensiona la pantalla a un tama3o de K50 por K50 pi(els. 4.;. An9lisis )e la funci(n mouse 56. E:entos )e rat(n.

El ob eti#o de este punto es el de indicar los mecanismos que nos ofrece GL'5 para interactuar con el entorno cuando se detecta un e#ento de rat"n. 0l igual que en puntos anteriores% esta interacci"n se realiza mediante llamadas a callbac7. La funci"n que indica a GL'5 la callbac7 a e ecutar ante un e#ento de teclado es glut-ouse3unc &mouse* que ha de ser colocada en la funci"n main&* glutJouseBunc &mouse*I Esta funci"n indica la callbac7 utilizada por GL'5 ante un e#ento de teclado. void Gouse ( int button& int state& int 2& int ) ) Esta funci"n es llamada cada #ez que se produce un e#ento de rat"n% recibe como parmetros el bot"n del rat"n% si se ha pulsado o se ha soltado% ! la posici"n del rat"n ante el e#ento. i4 ( button == GL-T_LE.T_,-TT*8 HH state == GL-T_D*@8 ) {
Pgina 12 de 25

($int4(I Jn!e (ulso el botKn iLMuie$do del $atKnN)" ' En esta secci"n de c"digo se indica las tareas a realizar en caso de que se ha!a producido algAn e#ento de rat"n &pulsar un bot"n% soltar un bot"n%...*. En el e emplo% en caso de pulsar el bot"n izquierdo del rat"n% se imprime por pantalla el mensa e <Se +uls( el 1ot(n i0=uier)o )el rat(n>. ;. P$ANTI$$A. 0 continuaci"n se presenta una plantilla bsica para la realizaci"n de programas con OpenGL. #include <GL/glut.h> #include <stdio.h> #include <stdlib.h> void init ( void ) { /E En esta secciKn se indica$Rn los (a$RGet$os de inicialiLaciKn de *(enGL (estado de bu44e$s& .) E/ ' void dis(la) ( void ) { /E En esta secciKn& se indica$Rn las ca$acte$Ssticas de *(enGL .inclu)endo el cKdigo necesa$io (a$a $e($esenta$ los obPetos en (antalla E/ ' void $esha(e ( int ;& int h) { /E En esta secciKn& se indica$R el cKdigo a ePecuta$ cuando se ($oduce una $ediGensiKn de la ventana. TaGbiTn es utiliLada (a$a de4ini$ el R$ea de ($o)ecciKn de la 4igu$a en la ventana. E/ ' void Ae)boa$d (unsigned cha$ Ae)& int 2& int )) { /E En esta secciKn& se indica$Rn las ta$eas a $ealiLa$ ante un evento de teclado. !e ha de tene$ ($esente Mue todos los eventos de teclado no ($oducen un $edibuPado de la (antalla& (o$ lo Mue es conveniente 4o$La$ este $edibuPado con 4unciones coGo glutPost+edis(la) () E/ ' void Gouse ( int button& int state& int 2& int ) ) { /E En esta secciKn& se indica$Rn las ta$eas a $ealiLa$ ante un evento de $atKn. !e ha de tene$ ($esente Mue todos los eventos de $atKn no ($oducen un $edibuPado de la (antalla& (o$ lo Mue es conveniente 4o$La$ este $edibuPado con 4unciones coGo glutPost+edis(la) () E/ ' int Gain ( int a$gc& cha$EE a$gv ) { glut/nit (Ha$gc& a$gv)" glut/nitDis(la)1ode (GL-T_+G, 0 GL-T_D*-,LE 0 GL-T_DEPT )" glut/nit@indo;!iLe (B?%&B?%)" glut/nit@indo;Position (5%%&5%%)" glut#$eate@indo; (OTStulo de la 9entana init ( )" glut+esha(e.unc ( $esha(e )"
Pgina 1& de 25

glutQe)boa$d.unc ( Ae)boa$d )" glut1ouse.unc ( Gouse )" glutDis(la).unc ( dis(la) )" glut1ainLoo( ( )" $etu$n %" W ?. PRI-ITI*AS DE DI8!@ .

'na primiti#a% es la unidad m/nima que interpreta OpenGL. >sicamente% es un con unto de #.rtices que OpenGL interpreta de una manera espec/fica al representarlos en pantalla. +ara crear primiti#as en OpenGL se utilizan las funciones gl8egin 56 ! glEn)56. La sinta(is para la creaci"n de la primiti#a esD gl>egin&* &1Nombre de la primiti#a2*I gl9erte(&6*I 6 gl9erte(&6*I glEnd&*I Las primiti#as sonD

#$7P INTS #$7$INES #$7$INE7STRIP #$7$INE7$ P #$7TRIAN#$ES #$7TRIAN#$E7STRIP #$7TRIAN#$E73AN #$7A!ADS #$7A!AD7STRIP #$7P $&# N

-rea puntos indi#iduales -rea l/neas. -rea l/neas discontinuas. -rea l/neas cerradas. -rea tringulos -rea tringulos discontinuos -rea tringulos en abanico. -rea cuadrados. -rea cuadrados discontinuos -rea pol/gonos.

Pgina 14 de 25

I!-st.a$in 4 P2!i<2n2s #+si$2s en O enGL.


?.1. Definici(n )e :Brtices

+ara la definici"n de los #.rtices% e(isten muchas funciones% siendo todas ellas una combinaci"n de formato de los puntos &entero% flotante%6* ! el nAmero de dimensiones asignadas al punto &K:% $:%6* gl*erteCD1%4;EDsif)EF:G5T&PE coor)s6 :onde las coordenadas posibles son 1%K%$ " M% ! los tipos de datos son sufi os de tipoD SufiHo Ti+o )e )atos > 4 G B : 'b 's 'i Entero S bits Entero 1X bits Entero $K bits @eal $K bits @eal XM bits Entero sin signo S bits Entero sin signo 1X bits Entero sin signo $K bits Ti+o )e Datos en C signed char short long float double unsigned char unsigned short unsigned long Definici(n )e ti+o GLb!te GLshort GLint% GLsizei GLfloat% GLclampf GLdouble% GLclampd GLub!te%GLboolean GLushort GLuint%GLenum%GLbitfield +en#$

I!-st.a$in 5 De,ini$in de V8.ti$es en O enGL


EHem+los: gl9erte(Ks &K% $*I
Pgina 15 de 25

?.%.

gl9erte($d &0.0% 0.0% $.1M15TKX5$XSTS* Di1uHo )e +untos

Es la primiti#a de OpenGL ms simple. El parmetro pasado a la funci"n gl>egin&* es GL=+OGN5% lo que hace que OpenGL lo interprete como puntos todos los #.rtices contenidos entre la funci"n gl>egin&* ! glEnd&*. 0 continuaci"n se muestra un c"digo donde se dibu an dos puntos &0.0.0* ! &K.K.K*. gl>egin&GL=+OGN5*I Q gl9erte($f &0.0f% 0.0f% 0.0f*I gl9erte($f &K.0f% K.0f% K.0f*I W glEnd&*I ?.4. Di1uHo )e lIneas.

En OpenGL% cada l/nea queda definida por dos puntos% un punto inicial donde comienza la l/nea ! un punto final donde acaba. +ara dibu ar l/neas% se ha de pasar a la funci"n gl>egin &* el parmetro GL=LGNE4% siendo e#aluados los #.rtices por pare as. 0 continuaci"n se muestra el c"digo donde se dibu an dos l/neas en el plano PY0% que se unen en el punto &0.0.0*. gl>egin&GL=LGNE4*I Q gl9erte($f & <1.0f% <1.0f% 0.0f*I gl9erte($f & 1.0f% 1.0f% 0.0f*I gl9erte($f & <1.0f% 1.0f% 0.0f*I gl9erte($f & 1.0f% <1.0f% 0.0f*I W glEnd&*I Obteniendo como resultado

I!-st.a$in : P.2<.a5a E9e5 !2 1


Pgina 1: de 25

?.;.

Di1uHo )e tri9ngulos.

En OpenGL% un tringulo queda definido por tres puntos. +ara dibu ar tringulos% se ha de pasar como parmetro a la funci"n gl>egin &* el parmetro GL=5@G0NGLE4% e#alundose los #.rtices de tres en tres. En la definici"n de un tringulo es importante el orden que se sigue en la definici"n de los #.rtices% horario o anti horario. -uando un pol/gono se define en sentido horario% OpenGL interpreta que tiene que mostrar la cara posterior% mientras que si el sentido es anti horario% OpenGL interpreta que tiene que mostrar la capa anterior. Esta particularizaci"n es importante debido a que dependiendo de los parmetros configurados en OpenGL% solo una de las caras anterior o posterior es #isible. 0 continuaci"n se muestra el c"digo que dibu a un tringulo en el plano PY0% que ha sido definido en sentido horario% consecuentemente muestra su cara anterior. gl>egin&GL=5@G0NGLE4*I Q gl9erte($f & <1.0f% 0.0f% 0.0f*I gl9erte($f & 0.0f% 1.0f% 0.0f*I gl9erte($f & 1.0f% 0.0f% 0.0f*I W glEnd&*I Obteniendo como resultado

I!-st.a$in * P.2<.a5a e9e5 !2 2.


?.?. Di1uHo )e cua)ra)os.

Esta primiti#a funciona e(actamente igual que la de tringulos% con la sal#edad de que los #.rtices son e#aluados de M en M.

Pgina 1* de 25

J.

C $ R DE RE$$EN .

+ara elegir el color de los pol/gonos% basta con hacer una llamada a gl-olor entre la definici"n de cada pol/gono &gl>egin &* F glEnd&**. La funci"n gl-olor define el color de rellenado actual ! lle#a como parmetros los #alores de las componentes @G> del color deseado% !% opcionalmente% un cuarto parmetro con el #alor alpha. 0l igual que con la funci"n gl9erte(88&*% e(isten muchas funciones para definir el color% en funci"n del nAmero de componentes de color utilizadas ! el formato de estas componentes &entero% flotante% 6*. 0 continuaci"n se muestra el c"digo para dibu ar un triangulo en el plano PY0 de color azul. gl>egin&GL=5@G0NGLE4*I Q gl-olor$f & 0.0f% 0.0f% 1.0f*I gl9erte($f & <1.0f% 0.0f% 0.0f*I gl9erte($f & 0.0f% 1.0f% 0.0f*I gl9erte($f & 1.0f% 0.0f% 0.0f*I W glEnd&*I

Obteniendo como resultado

I!-st.a$in = P.2<.a5a e9e5 !2 &


K. - DE$ DE S -8READ .

Es el m.todo que utiliza OpenGL para rellenar de color los pol/gonos. 4e especifica con la funci"n gl4hadeJodel. 4i el parmetro es GL=BL05% OpenGL rellenar los pol/gonos con el color acti#o en el momento que se defini" el Altimo parmetroI si es GL=4JOO5,% OpenGL rellenar el pol/gono interpolando los colores acti#os en la definici"n de cada #.rtice.
Pgina 1= de 25

Este c"digo es un e emplo de GL=BL05D gl4hadeJodel &GL=BL05*I gl>egin&GL=5@G0NGLE4*I Q gl-olor$f & 0.0f% 0.0f% 1.0f*I CC 0cti#amos el color 0zul. gl9erte($f & <1.0f% 0.0f% 0.0f*I gl-olor$f & 1.0f% 0.0f% 0.0f*I CC 0cti#amos el color @o o. gl9erte($f & 0.0f% 1.0f% 0.0f*I gl-olor$f & 0.0f% 1.0f% 0.0f*I CC 0cti#amos el color 9erde. gl9erte($f & 1.0f% 0.0f% 0.0f*I W

Obteniendo como resultado un tringulo de color 9erde

I!-st.a$in 3Uti!iCa$in de GLD)LAT.


4in embargo% el mismo c"digo cambiando la primera l/nea% gl4hadeJodel &GL=4JOO5,*I gl>egin&GL=5@G0NGLE4*I Q gl-olor$f & 0.0f% 0.0f% 1.0f*I CC 0cti#amos el color 0zul. gl9erte($f & <1.0f% 0.0f% 0.0f*I gl-olor$f & 1.0f% 0.0f% 0.0f*I CC 0cti#amos el color @o o. gl9erte($f & 0.0f% 1.0f% 0.0f*I gl-olor$f & 0.0f% 1.0f% 0.0f*I CC 0cti#amos el color 9erde. gl9erte($f & 1.0f% 0.0f% 0.0f*I W se obtiene un tringulo donde se han interpolado los colores asignados a los #.rtice% como se puede #er en la figura.
Pgina 13 de 25

I!-st.a$in 1? Uti!iCa$in de GLD('OOTE

L.

8@ET S #E -MTRIC S 4D.

GL'5 inclu!e un con unto de rutinas que permiten la generaci"n de forma fcil de ob etos geometricos en $:. 0 continuaci"n se presentan las ms importantes% as/ como un e emplo de su uso. glutSoli)S+here glutSoli)Cu1e glutSoli)Cone glutSoli)Torus glutSoli)Do)ecahe)ron glutSoli) ctahe)ron glutSoli)Tetrahe)ron glutSoli)Icosahe)ron glutSoli)Tea+ot

0 continuaci"n se presenta el c"digo necesario para dibu ar un dodecaedro solido

glutSolidDodecahedron&*I
Obteniendo como resultado

Pgina 2? de 25

I!-st.a$in 11 D2de$aed.2 s!id2.

N. N.1.

DESARR $$

DE $A PROCTICA.

Definici(n )el eHe )e coor)ena)as.

En la #entana del rea de traba o% dibu ar los e es de coordenadas 8 de color ro o% O de color #erde ! P de color azul con l/neas discontinuas% como se indica en la figura.

I!-st.a$in 12 E9es de C22.denadas

3.2.

Di1uHo )e un cu1o s(li)o

Pgina 21 de 25

En el espacio tridimensional creado% con centro en el origen de coordendas% dibu ar un cubo s"lido de color amarillo% como se indica en la figura

I!-st.a$in 1& C-#2 s!id2


N.4. Di1uHo )e toro , esfera.

En el espacio tridimensional establecido% dibu ar sobre cada uno de los e es coordenados ! del color de estos un toro ! una esfera como se muestran en la figura ad unto.

I!-st.a$in 14 T2.2s " es,e.as


Pgina 22 de 25

N.;.

Asignaci(n )e colores e interce+taci(n )e e:entos )e tecla)o.

Jodificar los colores asignados a cada uno de los e es coordenados ! sus figuras con el siguiente patr"nD

1
K $ N.?.

Jodificar el color asignado al e e 8. Jodificar el color asignado al e e O. Jodificar el color asignado al e e P. Interce+taci(n )e e:entos )e rat(n.

Jodificar el tama3o de las figuras geom.tricas creadas de forma que aumenten su tama3o al pulsar el bot"n derecho ! disminu!an su tama3o al pulsar el bot"n izquierdo% como se indican en las figuras ad untas. 4ituaci"n inicial

I!-st.a$in 15

Pgina 2& de 25

+ulsando bot"n derechoD

I!-st.a$in 1: P-!sand2 #2tn de.e$/2.


+ulsando bot"n izquierdo

I!-st.a$in 1* P-!sand2 #2tn iCF-ie.d2

Pgina 24 de 25

3.:.

Planificaci(n.

+ara la realizaci"n de la prctica 1 se disponen de $ sesiones de laboratorio.

3.*.

E:aluaci(n )e la +r9ctica.

5ras la realizaci"n de la prctica% esta se mostrar al profesor de la asignatura. 0s/ mismo% se entregar una memoria sobre la prctica% donde se comenten las principales funciones utilizadas en la prctica ! su funcionamiento. 0s/ mismo% se entregar el c"digo fuente - de la prctica ! los ma7efiles utilizados para la compilaci"n en su caso. 1P. 8I8$I #RA3QA. 1P.1. o $i1ros: +engl +rogramming #ui)e 5Re) 1oo26. Libro que da una #isi"n completa de OpenGL% con e emplos prcticos. httpDCCwww.opengl.orgCdocumentationCred=boo7C +engl reference manual 58lue 1oo26. Libro que proporciona una gu/a rpida a cada una de las funciones de OpenGL httpDCCwww.opengl.orgCdocumentationCblue=boo7C Programaci(n en o o o 1P.%. o +en#$. !na guIa )e referencia com+leta )e +en#$

0utoresD @ichard 4. )right R@ C Jichael 4weet. Editorial 0na!a G4>N SM<M15<01VX<T

!R$:

)eb ,ome de OpenGL www.opengl.org 'na de las implementaciones mas utilizadas de OpenGL. 4e pueden descargar manuales% c"digo fuente% e emplos% ... www.mesa$d.org

Pgina 25 de 25

Вам также может понравиться