introduccion a la libreria grafica 02

53
 Introducción a la librería gráfica Bladimir Díaz Campos

Upload: eveling-paz

Post on 14-Jul-2015

236 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 1/53

Introducción a la librería

gráficaBladimir Díaz Campos

Page 2: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 2/53

Funciones definidas en el

programaMensajes: Esta función es para tratar los

mensajes del sistema operativo como necesitemos.

Define y crea una ventana asociada a nuestro programa yesta asociada a Mensajes 

Una tercera parte es el bucle básico de un programawindows, ejecutandose continuamente y procesandolos mensajes hasta que recibe el mensaje de terminar elprograma (lo lanzamos nosotros al destruir laventana con el comando PostQuitMessage(0);). Al salir deeste bucle el programa termina

Page 3: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 3/53

Algunos conceptosNo hace falta bajarse OpenGL de ningún sitio, y para hacer

un programa, solo es necesario incluir "gl/gh.h" y "gl/glu.h" yañadir al proyecto las librerías opengl32.lib y glu32.lib

El buffer. Es un espacio de memoria reservado paraalmacenar algo. OpenGL usa varios bufferes. Los primeros ymás importantes son los que se usan para dibujar y el que

se usa para presentar en pantalla

Page 5: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 5/53

Page 6: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 6/53

Librerías relacionadas a OpenGL

GLU (OpenGL Utility Library )

GLUT (OpenGL Utility Toolkit )

Otras: Open Inventor-VTK

GLX, WGL, PGL, etc.

Page 7: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 7/53

GLUT (OpenGL Utility Toolkit) Es una librería auxiliar a OpenGL que permite crear ventanas

y manejar dispositivos como el teclado y ratón y estádiseñada para integrarse completamente con OpenGL

Page 8: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 8/53

Conceptos

La técnica de doble buffer, dibujamos en un buffer que no esvisible para que no se aprecie como se va haciendo nuestrodibujo y mientras presentamos el dibujo anterior (back

buffer y front buffer)Siempre deben ser mas de 24 dibujos segundo para que elojo no perciba el cambio y el movimiento sea suave.

Otro buffer importante es el de profundidad o z-buffer: En else guarda la profundidad de cada pixel al pintarlo (distancia

de lo que se pinta a la camara)Hay mas bufferes como el de estarcido (stencil) o el deacumulacion

Page 9: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 9/53

Sistema de coordenadas

Asi, en pantalla, sera el eje Y la altura, el eje X el ancho y elespacio virtual que se adentra en la pantalla sera el eje Zpero con coordenadas negativas.

Page 10: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 10/53

Orden de los puntosSi se hace en el sentido de las agujas del reloj o en sentidocontrario. Según el orden, el motor gráfico lo tomara comouna cara delantera o una cara trasera de un objeto

Page 11: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 11/53

Maquina de estadosEs una forma elegante de indicar que las instrucciones de

OpenGL se ponen de forma secuencial y las anterioresinfluyen en las siguientes.

Page 12: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 12/53

La nomenclatura de las ordenes

de OpenGLTodas empiezan por gl y continúan por la orden con la

primera en mayúscula

Tras esto hay una serie de caracteres que pueden estar ono, según la orden, y que significan el numero decoordenadas, el tipo, y una v en caso de que se pase a lafunción un puntero a los pará.

glVertex 3f (0.5,1.0,2.5); 

Otra forma es 

GLfloat vertices[] = {0.5,1.0,2.5}; glVertex 3fv (vertices);  

Page 13: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 13/53

Tipos de datos OpenGL

Page 14: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 14/53

Primer dibujo

Las coordenadas del eje Z siempre a 0

Sobre la " f " con que termina la funcion glVertex 

El parametro de la funcion glBegin(...) 

GL_TRIANGLES

GL_POINTS

GL_LINES 

glBegin(GL_TRIANGLES);

 // Le digo a OpenGL el primer vertice del triangulo:glVertex3f(0, 1, 0); // El segundo vertice del triangulo:glVertex3f(-1, 0, 0); // El tercer vertice del triangulo:glVertex3f(1, 0, 0);glEnd();

Page 15: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 15/53

Código

while(TRUE) // Se ejecuta continuamente.{Pinta(); // Funcion que pinta algo y se repite continuamente alestar aqui.

void Pinta(){ // Borro el buffer de atras (BackBuffer), donde voy a pintar:glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

 // Le digo a OpenGL que voy a pintar de este color, rojo:

glColor3f(1,0,0); // Le digo a OpenGL que voy a pintar y con triangulos:glBegin(GL_TRIANGLES); // Le digo a OpenGL el primer vertice de mi tr iangulo:glVertex3f(0, 0.5, 0); // El segundo vertice de mi triangulo:glVertex3f(-1, -0.5, 0); // El tercer vertice de mi triangulo:glVertex3f(1, -0.5, 0);glEnd();

 // Con esta fucion cambio el grosor de las lineas // para que se vea mejor:glLineWidth(5); // Le digo a OpenGL que voy a pintar de este color, azul:glColor3f(0,0,1); // Le digo a OpenGL que voy a pintar y con lineas:glBegin(GL_LINES); // Linea del primer vertice al segundo:

glVertex3f(0, 0.5, 0);}

glVertex3f(-1, -0.5, 0); // Cambio de color para probar, ahora verde:glColor3f(0,1,0); // Linea del segundo vertice al tercero:glVertex3f(-1, -0.5, 0);glVertex3f(1, -0.5, 0); // Cambio de color de nuevo, ahora una mezcla que da amarillo:

glColor3f(1,1,0); // Linea del tercer vertice al primero de nuevo:glVertex3f(1, -0.5, 0);glVertex3f(0, 0.5, 0);glEnd();

 // Ahora voy a marcar el centro // con un punto gordo para que se vea bien:glPointSize(15); // Y de color blanco:glColor3f(1,1,1); // Le digo a OpenGL que voy a pintar y con puntos:glBegin(GL_POINTS);glVertex3f(0, 0, 0);glEnd();

 // Cambio los bufferes de modo que presento lo que he dibujado

en pantalla:SwapBuffers(DevContex);

Page 16: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 16/53

Page 17: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 17/53

OpenGL Visualización

Page 18: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 18/53

Formato de la funcionesLos nombres de las funciones en estas librerías siguen lasiguiente convención:

{gl, glu, glut} <un nombre> [{d, f, u, … etc}] [v]

El prefijo gl indica que se trata de una función de la librería deOpenGL, el prefijo glu de una función de la librería GLU, y elprefijo glut es para las funciones de la GLUT

Ejemplos de funciones:

gluPerspective, glColor3f¸glutSwapBuffers, glMaterialf,

glMaterialfv… etc. 

Page 19: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 19/53

De vértices a píxeles

Coordenadas del objeto (x,y,z,w)

Coordenadas del ojo (eye)

Coordenadas de recorte

Coordenadas de dispositivo

Coordenadas de ventana (x,y)

Projection Transform

ModelView Transform

Perspective Transform

ViewPortTransform

Page 20: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 20/53

Coordenadas del objeto

Es el sistema de coordenadas en que se define el objeto

Page 21: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 21/53

Primitivas geométricas básicasglut {Wire | Solid }{Sphere, Cube, …}<parámetros> 

Page 22: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 22/53

Primitivas geométricas básicas

glut {Wire | Solid }{Sphere, Cube, …}<parámetros>Ejemplos:

glut WireSphere(radius, slices, stacks)

glutSolidTeapot(size)

glutWireSphere(radius, slices, stacks),glutSolidSphere(radius, slices, stacks)

glutWireCube(size), glutSolidCube(size)

glutWireCone(base, height, slices, stacks),glutSolidCone(base, height, slices, stacks)

glutWireDodecahedron(void), glutSolidDodecahedron(void)

glutWireOctahedron(void), glutSolidOctahedron(void)

glutWireTetrahedron(void), glutSolidTetrahedron(void)

Page 23: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 23/53

Primitivas geométricas básicasModo Descripción

GL_POINTS Puntos individuales aislados

GL_LINES Cada par de puntos corresponde a una recta

GL_LINES_STRIP Cada par de puntos corresponde a una recta

GL_LINE_LOOP Segmentos de recta conectadosGL_TRIANGLES Cada tres puntos un triangulo

GL_QUADS Cada cuatro puntos un cuadrado

GL_POLYGON Un polígono

glBegin(GL_POINTS);glVertex3f(0,0,0);glVertex3f(0,1,0);glVertex3f(1,1,0);glVertex3f(1,0,0);glEnd();

(0,0,0)  (1,0,0) 

(1,1,0) (0,1,0) 

Page 24: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 24/53

Primitivas geométricas básicasModo Descripción

GL_POINTS Puntos individuales aislados

GL_LINES Cada par de puntos corresponde a una recta

GL_LINES_STRIP Cada par de puntos corresponde a una recta

GL_LINE_LOOP Segmentos de recta conectadosGL_TRIANGLES Cada tres puntos un triangulo

GL_QUADS Cada cuatro puntos un cuadrado

GL_POLYGON Un polígono

glBegin(GL_LINES);glVertex3f(0,0,0);glVertex3f(0,1,0);glVertex3f(1,1,0);glVertex3f(1,0,0);glEnd();

(0,0,0)  (1,0,0) 

(1,1,0) (0,1,0) 

Page 25: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 25/53

Primitivas geométricas básicasModo Descripción

GL_POINTS Puntos individuales aislados

GL_LINES Cada par de puntos corresponde a una recta

GL_LINES_STRIP Cada par de puntos corresponde a una recta

GL_LINE_LOOP Segmentos de recta conectadosGL_TRIANGLES Cada tres puntos un triangulo

GL_QUADS Cada cuatro puntos un cuadrado

GL_POLYGON Un polígono

glBegin(GL_LINE_STRIP);glVertex3f(0,0,0);glVertex3f(0,1,0);glVertex3f(1,1,0);glVertex3f(1,0,0);glEnd();

(0,0,0)  (1,0,0) 

(1,1,0) (0,1,0) 

Page 26: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 26/53

Primitivas geométricas básicasModo Descripción

GL_POINTS Puntos individuales aislados

GL_LINES Cada par de puntos corresponde a una recta

GL_LINES_STRIP Cada par de puntos corresponde a una recta

GL_LINE_LOOP Segmentos de recta conectadosGL_TRIANGLES Cada tres puntos un triangulo

GL_QUADS Cada cuatro puntos un cuadrado

GL_POLYGON Un polígono

glBegin(GL_LINE_LOOP);glVertex3f(0,0,0);glVertex3f(0,1,0);glVertex3f(1,1,0);glVertex3f(1,0,0);glEnd();

(0,0,0)  (1,0,0) 

(1,1,0) (0,1,0) 

Page 27: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 27/53

Primitivas geométricas básicasModo Descripción

GL_POINTS Puntos individuales aislados

GL_LINES Cada par de puntos corresponde a una recta

GL_LINES_STRIP Cada par de puntos corresponde a una recta

GL_LINE_LOOP Segmentos de recta conectadosGL_TRIANGLES Cada tres puntos un triangulo

GL_QUADS Cada cuatro puntos un cuadrado

GL_POLYGON Un polígono

glBegin(GL_TRIANGLES);glVertex3f(0,1,0);glVertex3f(1,1,0);glVertex3f(1,0,0);glEnd();

(1,0,0) 

(1,1,0) (0,1,0) 

Page 28: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 28/53

Primitivas geométricas básicasModo Descripción

GL_POINTS Puntos individuales aislados

GL_LINES Cada par de puntos corresponde a una recta

GL_LINES_STRIP Cada par de puntos corresponde a una recta

GL_LINE_LOOP Segmentos de recta conectadosGL_TRIANGLES Cada tres puntos un triangulo

GL_QUADS Cada cuatro puntos un cuadrado

GL_POLYGON Un polígono

glBegin(GL_QUADS);glVertex3f(0,0,0);glVertex3f(0,1,0);glVertex3f(1,1,0);glVertex3f(1,0,0);glEnd();

(1,0,0) 

(1,1,0) 

(0,0,0) 

(0,1,0) 

Page 29: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 29/53

Primitivas geométricas básicasModo Descripción

GL_POINTS Puntos individuales aislados

GL_LINES Cada par de puntos corresponde a una recta

GL_LINES_STRIP Cada par de puntos corresponde a una recta

GL_LINE_LOOP Segmentos de recta conectadosGL_TRIANGLES Cada tres puntos un triangulo

GL_QUADS Cada cuatro puntos un cuadrado

GL_POLYGON Un polígono

glBegin(GL_POLYGON);glVertex3f(0,0,0);glVertex3f(-0.5,1,0);glVertex3f(0.5,1.5,0);glVertex3f(1.5,1,0);glVertex3f(0,1,0);glEnd(); (1,0,0) 

(1.5,1,0) 

(0,0,0) 

(0.5,1.5,0) 

(-0.5,1,0) 

Page 30: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 30/53

De vértices a píxeles

Coordenadas del objeto (x,y,z,w)

Coordenadas del ojo (eye)

Coordenadas de recorte

Coordenadas de dispositivo

Coordenadas de ventana (x,y)

Projection Transform

ModelView Transform

Perspective Transform

ViewPortTransform

Page 31: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 31/53

Coordenadas del mundoSistema de coordenadas en que se define la escena. Define

como se colocan los diferentes objetos en la escena.(x,y,z,w) T

mundo=(x,y,z,w)Tobjeto. M escena

M escena Pasa de coordenadas objeto a coordenadas mundo(rotaciones, traslaciones, escalados, etcétera)

Page 32: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 32/53

Coordenadas del mundoPara colocar un par de objetos de dos maneras diferentes se

utilizan dos matrices Modelview (M) distintas.Para indicar a OpenGL que queremos trabajar con la matrizM:

glMatrixMode (GL_MODELVIEW);

Al principio de la ejecución del programa, M=i

Page 33: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 33/53

Transformación de rotaciónLa función glRotatef(alpha, x, y, z)

Multiplica la matriz actual por la matriz de rotación de alphagrados alrededor del eje (x,y,z)

glRotatef(-90.0f, 1.0f, 0.0f, 0.0f)

Page 34: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 34/53

Transformacion de traslaciónLa función glTranslatef(x,y,z)

Multiplica la matriz actual por la matriz de traslación con unvector (x,y,z)

glTranlatef(0,1,0)

Page 35: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 35/53

Transformación de escaladoLa funcion glScale(sx,sy,sz)

Multiplica la matriz actual por la matriz de escalado defactores (sx,sy,sz)

gl Scalef(1,2.5,1)

Page 36: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 36/53

Transformación de escaladoLa funcion glScale(sx,sy,sz)

Multiplica la matriz actual por la matriz de escalado defactores (sx,sy,sz)

gl Scalef(1,2.5,1)

Page 37: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 37/53

Pila de matricesDado que las operaciones sobre las matrices son

acumulativas, es necesario tener una manera de recuperarel estado anterior de la matriz.

OpenGL dispone de una pila para cada matriz; para la matrizModelView el tamaño de esta pila es de al menos 32matrices, mientras que para la matriz Projection es de al

menos 2.glPushMatrix()

glPopMatrix()

Page 38: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 38/53

De vértices a píxeles

Coordenadas del objeto (x,y,z,w)

Coordenadas del ojo (eye)

Coordenadas de recorte

Coordenadas de dispositivo

Coordenadas de ventana (x,y)

Projection Transform

ModelView Transform

Perspective Transform

ViewPortTransform

Page 39: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 39/53

Coordenadas de ojoSistema de coordenadas en que se define la escenarespecto al punto de vista de la cámara.

(z,y,z,w)Tojo = (x,y,z,w)T

mundo . M punto_de_vista

Donde M punto_de_vista pasa de coordenadas de escena acoordenadas de ojo (rotación y traslación)

Page 40: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 40/53

Punto de vistaPara definir un punto de vista, disponemos de la función:

void gluLookAt (eyeX, eyeY, eyeZ, centX, cenY, cenZ, vp_X,

vp_Y, vp_Z);donde eye corresponde a la posición dela cámara, cen corresponde al puntohacia donde mira la cámaray vp es un vector que define laorientación de la cámara. No podemosllamar a gluLookAt en cualquier

momento, puesto que tienepostmultiplicar la matriz ModelView (portanto, conviene llamarla lo primerode todo). El vector vp no puede serparalelo al vector formado por eye ycen, es más, debería serleperpendicular. Si no, el resultado esimpredecible

Page 41: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 41/53

De vértices a píxeles

Coordenadas del objeto (x,y,z,w)

Coordenadas del ojo (eye)

Coordenadas de recorte

Coordenadas de dispositivo

Coordenadas de ventana (x,y)

Projection Transform

ModelView Transform

Perspective division

ViewPortTransform

Page 42: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 42/53

Coordenadas de recorteCorresponde a las coordenadas del volumen de

visualización normalizado(x, y, z, w) T recorte = (x, y, z, w) T ojo . P

Donde P es una matriz de proyección

Page 43: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 43/53

Tipo de proyecciónPara definir el tipo de proyección, tendremos que modificar la

matriz Projection(P)Para indicar a OpenGL que queremos trabajar con la matrizP se escribe:

glMatrixMode(GL_PROJECTION)

Page 44: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 44/53

Proyección ortogonalEquivale a definir un volumen de visualización en forma de

caja alrededor del «ojo» de la camara (esto es podemos verdetrás). Para hacerlo se llama:

glOrtho (left, right, bottom, top, near, far)

Page 45: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 45/53

Proyección de perspectivaPara conseguir una proyección perspectiva, se tiene lafunción:

glFrustum (left, right, bottom, top, near, far)

Page 46: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 46/53

Proyección perspectivaOtra función sencilla es:

gluPerspective (alpha, aspect, near, far)

Page 47: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 47/53

De vértices a píxeles

Coordenadas del objeto (x,y,z,w)

Coordenadas del ojo (eye)

Coordenadas de recorte

Coordenadas de dispositivo

Coordenadas de ventana (x,y)

Projection Transform

ModelView Transform

Perspective division

ViewPortTransform

Page 48: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 48/53

Coordenadas de dispositivoSon el resultado de la selección de las coordenadas que

caen dentro del volumen de visualización normalizado.Aquí es donde se aplican los algoritmos de recorte

Corresponde a la foto en coordenadas del mundo

Page 49: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 49/53

De vértices a píxeles

Coordenadas del objeto (x,y,z,w)

Coordenadas del ojo (eye)

Coordenadas de recorte

Coordenadas de dispositivo

Coordenadas de ventana (x,y)

Projection Transform

ModelView Transform

Perspective division

ViewPortTransform

Page 50: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 50/53

Coordenadas de ventanaSon las coordenadas de ventana-vista, es decir, las

coordenadas de la pantallaSon el resultado de aplicar la transformación de viewport alas coordenadas del dispositivo

Page 51: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 51/53

ViewPortPara definir el lugar donde se renderizará la foto sobre la

ventana de la aplicación, existe la función:glViewport (x,y,cx,cy)

Donde x, y corresponde a la posición del viewport y cx, cy altamaño

(x,y)cx

cy

Page 52: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 52/53

ViewportPara mantener la proporcion de los objetos es impresendibleque la ventana-mundo y ventana-vista tengan la mismarelacion altura/ancho

Page 53: Introduccion a La Libreria Grafica 02

5/13/2018 Introduccion a La Libreria Grafica 02 - slidepdf.com

http://slidepdf.com/reader/full/introduccion-a-la-libreria-grafica-02 53/53

ResumenComo se verá un objeto en la pantalla vendrá dado por:

La matriz del ModelView M, que define la colocación de losobjetos en la escena y el punto de vista (M = M escena . Mpunto_de_vista)

La matriz Projection P, que define el tipo de proyección

La posición del Viewport en coordenadas de la pantalla