Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Programacin Grfica
Parte II
Jhonny Felpez Andrade
jrfelizamigo@gmail.com
Contenido
Primitivas Simples
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
Documentacin
Ms documentacin
Objetivos
1.
2.
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
12
Abre una ventana Obtiene la entrada del ratn y teclado. Maneja Menus
Controla-Eventos
13
Sintaxis Bsica
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:
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.
GLUT_LEFT_BUTTON
21
GL_POINTS
GL_LINES GL_LINE_STRIP
GL_POLYGON
GL_LINE_LOOP GL_TRIANGLES
GL_QUAD_STRIP GL_TRIANGLE_STRIP GL_TRIANGLE_FAN
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
Eclipse
http://www.eclipse.org/downloads/
http://www.oracle.com/technetwork/java/javase/downl oads/index.html
JDK
http://download.java.net/media/jogl/builds/archive/
26
27
28
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
32
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
(-0.5,0.5)
(0.5,0.5)
(-0.5,-0.5)
(0.5,-0.5)
37
Polilnea
p3
p1
p5
p4
p2
38
Polilnea Cerrada
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
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
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
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
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
49
Problema de la Colisin
En un programa de video juego de combate. Se tendr una escena, donde dos competidores se enfrentan con espadas.
Cuando se cruzan las dos espadas se escuchar un sonido. Agregar el algoritmo que verifique si estos dos segmentos se intersectan.
50
Problema
Deseamos conocer si dos circunferencias se intersectan Qu necesitamos conocer? Hay algn caso especial?
51
Problema
52
GRACIAS
53