Proyecto integrador. Las TIC en la sociedad S4.pptx
Opengl
1. Gráficas en 2D - OpenGL
Inicializacion
#se define a l i n i c i o e indica como debe proyectar l a imagen en l a
ventana gluOrtho2D(0.0,width,0.0,height)
#define una matriz de proyeccion ortogonal 2D
#se llama antes de redibujar e l contenido en l a pant alla #sino l a
nueva f igura se superpone a l a a n t e r i o r
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
#limpia l a pant alla
#borra e l contenido del buffer
2. Graficasen 2D - OpenGL
Vertices
Los verticessonla unidad basicadetrabajo enOpenGL. Cada figuradebe serdibujada especificando
previamente la posiciondesus vertices.
Funciones:
glVertex2f(x,y) #recibe x,y f l o a t glVertex2fv(v) #recibe un vector
glVertex2i(x,y) #recibe x,y i n t
Formaanalogapara3D.
Primitivas
Los verticespermitendaruna ”guıa” para posteriormente dibujarlas primitivas.
Funciones
glBegin(PRIMITIVA) #comienza a dibujar glEnd() #termina de dibujar
4. Graficas2D - OpenGL - Primitivas
Sintaxis
glBegin(PRIMITIVA) #inicio de l a figura
.
. #vertices de l a figura
.
glEnd() #fin de l a figura
Ejemplo
glBegin(GL_TRIANGLES)
glVertex2f(0.0, 0. 0)
glVertex2f(150.0, 0. 0)
glVertex2f(75.0, 100.0)
glEnd()
5. Graficas 2D - OpenGL
En el ejemplo anterior anterior OpenGL redibuja la figura en cada
frame, solamente seborra y la vuelve a dibujar en otro lugar.
Es posible tener una visionmas intuitiva del proceso?
Dibujar la figura una sola vez, almacenarla y posteriormente aplicar
transformaciones de:
Escalamiento Rotacion Traslacion
6. Transformaciones Geometricas
Traslaciones glTranslatef(x,y,z)
Aplica una transformacion de traslacioncon magnitud x,y,z
Escalamiento glScalef(x,y,z)
Aplica una transformacion de escala con los factores x,y,z en cada
eje. Valores negativos producen reflexiones en torno al eje.
7. Transformaciones Geometricas
Rotaciones glRotate(angle,x,y,z)
Aplica una transformacion de rotacion de ”angle” grados en torno al
eje (x,y,z) Rotacion segun la regla de la mano derecha, ´angulos en
contra las manecillas del reloj.
Rotacion respecto a un arbitrario
Se traslada al origen, seaplica rotaciony seretorna a la posicion
original.
8. Matriz de Transformacion
Cada transformacion se aplica sobre la actual matriz de
transformacion del modelo, que afecta a toda la escena.
(Multiplicacion de matrices).
Para aplicar transformaciones locales (no a toda la escena) se
debe guardar la matriz actual, aplicar transformaciones y
volver al estado anterior.
Uso de stack de matrices. Funciones glPushMatrix() (guardar
la matriz) y glPopMatrix() (restaurar la matriz).
NOTA: Aplicar transformaciones en orden inverso.
9. Graficas 2D - OpenGL
Ejemplo
def d i b u j a r ( ) :
lista=glGenLists(1) # i n t que determina l o s elementos a crear
glNewList(lista,GL_COMPILE)
#se dibuja de forma similar pero se carga en una l i s t a
glBegin(GL_TRIANGLES) glVertex2f(0.0, 0. 0)
glVertex2f(150.0, 0. 0)
glVertex2f(75.0, 100.0) glEnd()
glEndList()
def a c t u a l i z a r ( ) :
#para a c t u a l i z a r e l dibujo se llaman l a s #matrices de
transformacion glPushMatrix()
glColor4f(0, 0 , 1 , 0) #(R,G,B,ALPHA)
glTransla tef( x, y , z ) #transladar a ( x , y , z ) glScalef(coefX, coefY,
coefZ) #escalar segun coeficientes
glRotatef(angulo, x , y , z ) #rotar en angulo, segun e j e s x , y , z
g l C a l l L i s t ( l i s t a ) #llamar a l a l i s t a que guarda e l dibujo
glPopMatrix()