Sei sulla pagina 1di 53

Introduccin a los Grficos.

Programacin Grfica
Parte II
Jhonny Felpez Andrade

jrfelizamigo@gmail.com

Contenido

Introduccin Caractersticas del OpenGL JOGL Ejemplos

Primitivas Simples

Reglas de los polgonos

Introduccin a los Grficos

INTRODUCCIN

Qu es OpenGL?

OpenGL es una librera grfica (API) para grficos interactivos en 2D y 3D Desciende el GL (de SGI) Primera versin en 1992; ahora: 4.2 (2012). Es una especificacin que define una API (del ingls Application Programming Interface Interfaz de Programacin de Aplicaciones) para la programacin de grficos en varios lenguajes

Dnde se utiliza OpenGL?


CAD. Realidad Virtual. Visualizacin Cientfica. Simulacin de Vuelos. Video Juegos.

Documentacin

Ms documentacin

Introduccin a los Grficos

CARACTERSTICAS DEL OPENGL


8

Caractersticas del OpenGL

Objetivos
1.

2.

Ocultar complejidad de Hardware Ocultar las capacidades del Hardware

Propsito: Dibujar (puntos, lneas, polgonos) OpenGL como una Mquina de Estados, prefiero llamarlos Switches
9

OpenGL tiene

Funciones para dibujar en 2D y 3D Transformaciones Algoritmos de iluminacin Z-Buffering Mapeo de Texturas Soporte para Shaders Blending, elementos de antialiasing

10

OpenGL no tiene

Funciones para manejar ventanas, eventos de ratn o teclado Funciones o procedimientos para crear un objeto completo a partir de una descripcin natural ejemplo: comando dibujaRueda() Soporte nativo para dibujar curvas Soporte nativo para audio y/o texto Deteccin de colisiones Cargar imgen
11

Libreras OpenGL
OpenGL

librera principal

OpenGL32

en Windows JOGL en el sistema linux


OpenGL
Provee

Utility Library (GLU)

algunas funciones de alto nivel basadas en el anterior.


gluLookAt gluPerspective

12

Libreras OpenGL (cont.)

OpenGL Utility Toolkit (GLUT)

Provee funcionalidad comn para todos los sistemas windows


Abre una ventana Obtiene la entrada del ratn y teclado. Maneja Menus

Controla-Eventos

/* Registro llamadas */ glutDisplayFunc(display); glutReshapeFunc(resize); glutKeyboardFunc(keyboard); glutMouseFunc(mouse); glutSolidTeapot

13

Sintaxis Bsica

OpenGL contiene 3 elementos distintos bsicos.

Funciones Tipos de datos Constantes

14

Funciones

Usos

Dibujado de elementos Manipulacin de proyecciones Transformaciones Geomtricas Habilitacin / Deshabilitacin de switches Texturizado Aplicacin de elementos para lograr iluminacin Cuenta con 150 funciones bsicas
15

Sintaxis de funciones

Se anteponen gl si pertenecen a la biblioteca OpenGL, glu o glut si son de stas respectivamente Contienen informacin al final de cuntos parmetros reciben y cul es su tipo Ejemplos:

glVertex3f glVertex3fv glVertex3i


16

Formato de Funciones en OpenGL


glVertex3fv( v )

Nmero de componentes
2 - (x,y) 3 - (x,y,z) 4 - (x,y,z,w)

Tipo de Dato
b ub s us i ui f d byte unsigned byte short unsigned short int unsigned int float double

Vector
omite v para forma escalar
glVertex2f( x, y )

17

Tipos de datos

Evitan problemas de implementacin en compiladores donde el tamao de los tipos de datos son diferentes a los estndares Se recomienda su uso para asegurar el rendimiento de una aplicacin ms no es necesario u obligatorio

Inician con GL
18

19

Constantes

Usos

Activar o desactivar ciertas propiedades de dibujado o switches Dar ciertos valores a parmetros de funciones que configuran algn elemento

Todos van con maysculas empezando con GL y generalmente tienen _ cuando presentan espacios, ya que sus nombres son muy descriptivos acerca de para que sirven
20

Constantes

Ej.

GL_LIGHTING GL_COLOR_BUFFER_BIT GL_LINES

Tambin las encontramos en GLUT Ej.

GLUT_LEFT_BUTTON
21

Primitivas del OpenGL

GL_POINTS
GL_LINES GL_LINE_STRIP

GL_POLYGON

GL_LINE_LOOP GL_TRIANGLES
GL_QUAD_STRIP GL_TRIANGLE_STRIP GL_TRIANGLE_FAN

Introduccin a los Grficos

JOGL

23

JOGL

JOGL es un paquete Java el cual permite enlazar las libreras OpenGL para el JVM.

24

JOGL

El proyecto JOGL contiene la versin JAVA junto a la API OpenGL (JSR-231). JOGL provee todo el acceso para estas APIs con la especificacin del OpenGL 2.0 e integra al AWT y Swing. Es parte de una adecuada tecnologa open-source iniciada por Game Technology Group de Sun Microsystems
25

Qu se necesita para elaborar un proyecto JAVA con JOGL?

Eclipse

http://www.eclipse.org/downloads/
http://www.oracle.com/technetwork/java/javase/downl oads/index.html

JDK

Archivos .jar y .dll

http://download.java.net/media/jogl/builds/archive/

26

27

28

Crear un proyecto JAVA con JOGL

29

Adicionando Dependencias

Cree un nuevo directorio en su proyecto denominado lib. Adicione jogl.jar y gluegen-rt.jar al nuevo directorio lib. Copie los archivos .dll en el directorio principal de su proyecto (gluegen-rt.dll, jogl.dll, jogl_awt.dll, jogl_cg.dll. Vaya a Project->Properties->Java Build Path y escoja la pestaa Libraries. Adicione jogl.jar y gluegen-rt.jar.
30

31

Muestra del Proyecto

Su Proyecto debera mostrarse igual a esto:

32

Introduccin a los Grficos

EJEMPLOS
PRIMITIVAS GRAFICAS
33

Prepara ambiente

34

Volumen de Visualizacin

OpenGL no trabaja con coordenadas de pantalla, sino con coordenadas posicionales dentro del volumen de visualizacin
y
(0,1,0)

(-1,0,0)

(1,0,0)

x
(0,-1,0)

z
glOrtho(-1.0,1.0,-1.0,1.0,-1.0,1.0)
35

Puntos
Por defecto tamao 1 Mejora calidad

(0.0,0.0)

(-0.5,-0.5)
36

Lneas

Por defecto tamao 1 Lnea uniforme


Combinacin (colores, mtodo antialias)

(-0.5,0.5)

(0.5,0.5)

(-0.5,-0.5)

(0.5,-0.5)
37

Polilnea

Por defecto tamao 1 Lnea uniforme


Combinacin (colores, mtodo antialias)

p3

p1

p5

p4

p2
38

Polilnea Cerrada

Por defecto tamao 1 Lnea uniforme


Combinacin (colores, mtodo antialias)

p3

p1

p5

p4

p2
39

Tringulos

p6

p5

V2
El sentido anti-horario indica la cara frontal.

p1

p4

p2

p3
40

V0

V1

Modos de polgonos

Por defecto, los polgonos son slidos. Otras opciones son: hueco con aristas o slo mostrando los vrtices Cada cara puede mostrarse de forma diferente void glPolygonMode (int cara, int modo)
GL_FILL GL_FRONT_AND_BACK GL_BACK GL_POINT GL_LINE

GL_FRONT

glPolygonMode (GL_FRONT, GL_FILL)

41 glPolygonMode (GL_BACK, GL_LINE)

Banda de Tringulos

p6

p5

p1

p4

Si ninguno de los N vrtices se repite, se obtiene N-2 tringulos. Cada uno de los sucesivos tringulos comparte una arista.

p2

p3
42

Banda de Tringulos (Abanico)

p6

p5

p1

p4

Si ninguno de los N vrtices se repite, se obtiene N-2 tringulos. Todos los tringulos comparten un vrtice.

p2

p3
43

Cuadrilteros
V3 V0

V2

V1

p1

p8

p4

p5

Si ninguno de los N vrtices se repite, se obtiene N/2-1 cuadrilteros.


p3 p2 p6
44

p7

Banda de Cuadrilteros

p1

p8

p4

p5

Si ninguno de los N vrtices se repite, se obtiene N/2-1 cuadrilteros. Cada uno de los cuadrilteros sucesivos comparten una arista.

p3 p2

p6
45

p7

Polgonos
V0

V4

V3

V1

V2

p5

p1

p4

Si ninguno de los N vrtices se repite, se obtiene N/2-1 cuadrilteros. Cada uno de los cuadrilteros sucesivos comparten una arista.

p2

p3

46

Reglas de los polgonos

Debido a la optimizacin de los algoritmos internos de OpenGL, existen tres restricciones para los polgonos:

Todos los polgonos deben ser planares ax + by + cz + d = 0 Las aristas no deben intersectarse Los polgonos deben ser convexos

Polgonos vlidos

Polgonos no vlidos

47

Subdivisin y bordes

Un polgono cncavo puede representarse como varios convexos Si se dibuja relleno, los bordes no se aprecian

48

Trabajo del ltimo semestre

Victor Hugo Soliz Kuncar

49

Problema de la Colisin

En un programa de video juego de combate. Se tendr una escena, donde dos competidores se enfrentan con espadas.

Las espadas pueden ser representadas como segmentos de lneas.

Cuando se cruzan las dos espadas se escuchar un sonido. Agregar el algoritmo que verifique si estos dos segmentos se intersectan.

Esto no es tan simple!

50

Problema

Deseamos conocer si dos circunferencias se intersectan Qu necesitamos conocer? Hay algn caso especial?

51

Problema

Deseamos conocer si dos circunferencias se intersectan Qu necesitamos conocer?

Centro y radio de cada circunferencia.

Hay algn caso especial?

52

Introduccin a los Grficos

GRACIAS

53

Potrebbero piacerti anche