Está en la página 1de 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/ae01. 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.$eta$in de e4ent2s de te$!ad2....................................2&
3.5. Inte.$eta$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. INTRD!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 obetos ! 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 compleos para definir obetos de tres dimensiones &autom"#iles%
cuerpos% a#iones%..*. -on OpenGL% si se requiere construir un obeto compleo% 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 obetos% 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 eemplo GL0'8.
La funcionalidad de las funciones de GL'5 se puede di#idir en dos apartados%
Gesti"n de 9entanas.
:ispla! -allbac7.
%.1. #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 eemplo 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 eecuta la funci"n glut-ain$oo+ &*.
%.%. Dis+la, Call1ac2.
glutDis+la,3unc &#oid &;fun.*&**
Especifica el c"digo a eecutar 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 eecutado
el bucle% este nunca termina.
4. -I PRI-ER PR#RA-A.
Este primer programa muestra un eemplo sencillo de la aplicaci"n ! funcionalidad de OpenGL. El
c"digo de 1eemplo1.c2 abre una #entana ! dibua dentro un tringulo en blanco.
C; eemplo1.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 eecutar ser/aD
E gcc eemplo1.c Fo eemplo1 Flglut FlGL' FlGL
4.1. ANA$ISIS DE $A 3!NCI"N -AIN.
La estructura bsica de un programa de OpenGL se muestra en eemplo1.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 dibuar 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 eemplo1.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 eemplo%
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 redibuada & por eemplo% al ma(imizar% poner otras #entanas
encima% ...*
glutJainLoop & *I
Esta funci"n cede el control de fluo 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 eecuta cuando se produce algAn
e#ento de GL'5. Esta funci"n ha de contener el c"digo de los obetos que queremos dibuar.
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 empua 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 dibuar 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 dibuar 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 trabae 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! esa$i2 &D.
'na #ez que se ha dibuado un obeto 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 ee #ertical es el O
! el ee 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 eecutar 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 dibuar.
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 leano 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 leano no ser
representado en la #entana.
I!-st.a$in & De,ini$in de e.se$ti4a en OenGL.
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 oos 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 obeti#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 eecutar 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
eemplo en caso de pulsar la tecla KV &E4-* se termina la eecuci"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 obeti#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 eecutar 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 eemplo% en caso de pulsar el bot"n izquierdo del rat"n%
se imprime por pantalla el mensae <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 conunto 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
#$7PINTS -rea puntos indi#iduales
#$7$INES -rea l/neas.
#$7$INE7STRIP -rea l/neas discontinuas.
#$7$INE7$P -rea l/neas cerradas.
#$7TRIAN#$ES -rea tringulos
#$7TRIAN#$E7STRIP -rea tringulos discontinuos
#$7TRIAN#$E73AN -rea tringulos en abanico.
#$7A!ADS -rea cuadrados.
#$7A!AD7STRIP -rea cuadrados discontinuos
#$7P$&#N -rea pol/gonos.
Pgina 14 de 25
I!-st.a$in 4 P2!i<2n2s #+si$2s en OenGL.
?.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 sufios de tipoD
SufiHo Ti+o )e )atos Ti+o )e Datos en C Definici(n )e ti+o +en#$
> Entero S bits signed char GLb!te
4 Entero 1X bits short GLshort
G Entero $K bits long GLint% GLsizei
B @eal $K bits float GLfloat% GLclampf
: @eal XM bits double GLdouble% GLclampd
'b Entero sin signo S bits unsigned char GLub!te%GLboolean
's Entero sin signo 1X bits unsigned short GLushort
'i Entero sin signo $K bits unsigned long GLuint%GLenum%GLbitfield
I!-st.a$in 5 De,ini$in de V8.ti$es en OenGL
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 dibuan 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 dibuar l/neas% se ha de pasar a la funci"n gl>egin &* el parmetro
GL=LGNE4% siendo e#aluados los #.rtices por pareas. 0 continuaci"n se muestra el c"digo donde se
dibuan 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 dibuar 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 dibua 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 dibuar 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 eemplo 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 @oo.
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 @oo.
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@ETS #E-MTRICS 4D.
GL'5 inclu!e un conunto de rutinas que permiten la generaci"n de forma fcil de obetos geometricos
en $:. 0 continuaci"n se presentan las ms importantes% as/ como un eemplo 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 dibuar un dodecaedro solido
glutSolidDodecahedron&*I
Obteniendo como resultado
Pgina 2? de 25
I!-st.a$in 11 D2de$aed.2 s!id2.
N. DESARR$$ DE $A PROCTICA.
N.1. Definici(n )el eHe )e coor)ena)as.
En la #entana del rea de trabao% dibuar los ees de coordenadas 8 de color roo% 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% dibuar 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% dibuar sobre cada uno de los ees coordenados ! del color de
estos un toro ! una esfera como se muestran en la figura adunto.
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 ees coordenados ! sus figuras con el siguiente patr"nD
1 Jodificar el color asignado al ee 8.
K Jodificar el color asignado al ee O.
$ Jodificar el color asignado al ee P.
N.?. 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
aduntas.
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. $i1ros:
o +engl +rogramming #ui)e 5Re) 1oo26.
Libro que da una #isi"n completa de OpenGL% con eemplos prcticos.
httpDCCwww.opengl.orgCdocumentationCred=boo7C
o +engl reference manual 58lue 1oo26.
Libro que proporciona una gu/a rpida a cada una de las funciones de OpenGL
httpDCCwww.opengl.orgCdocumentationCblue=boo7C
o Programaci(n en +en#$. !na guIa )e referencia com+leta )e +en#$
o 0utoresD @ichard 4. )right R@ C Jichael 4weet.
o Editorial 0na!a
o G4>N SM<M15<01VX<T
1P.%. !R$:
o )eb ,ome de OpenGL
www.opengl.org
o 'na de las implementaciones mas utilizadas de OpenGL. 4e pueden descargar manuales% c"digo
fuente% eemplos% ...
www.mesa$d.org
Pgina 25 de 25

También podría gustarte