Graficación M.C. Juan Carlos Olivares Rojas. Agenda Diseño de juegos con DirectX. OpenGL. Java3D.

31
Graficación M.C. Juan Carlos Olivares Rojas

Transcript of Graficación M.C. Juan Carlos Olivares Rojas. Agenda Diseño de juegos con DirectX. OpenGL. Java3D.

Page 1: Graficación M.C. Juan Carlos Olivares Rojas. Agenda Diseño de juegos con DirectX. OpenGL. Java3D.

Graficación

M.C. Juan Carlos Olivares Rojas

Page 2: Graficación M.C. Juan Carlos Olivares Rojas. Agenda Diseño de juegos con DirectX. OpenGL. Java3D.

Agenda

• Diseño de juegos con DirectX.

• OpenGL.

• Java3D.

Page 3: Graficación M.C. Juan Carlos Olivares Rojas. Agenda Diseño de juegos con DirectX. OpenGL. Java3D.

Introducción

• Los sistemas de graficación se basan a través de primitivas de dibujo en pantalla en 2D. Dichas primitivas generalmente son el punto, la línea, figuras geométricas como el rectángulo, la elipse, etc.

• A pesar de basarse en elementos en 2D se pueden crear figuras 3D cambiando las perspectivas y definiendo volumen a las figuras.

Page 4: Graficación M.C. Juan Carlos Olivares Rojas. Agenda Diseño de juegos con DirectX. OpenGL. Java3D.

Introducción

• Con la utilización de estas APIs básicas para el manejo de elementos gráficos, en la pantalla se pueden construir sistemas para realizar gráficos, videojuegos, elementos gráficos del sistema operativo, etc.

• Las APIs de graficación en la gran mayoría de los casos dependen del lenguaje de programación utilizado para programarlas.

Page 5: Graficación M.C. Juan Carlos Olivares Rojas. Agenda Diseño de juegos con DirectX. OpenGL. Java3D.

Introducción

• En este curso describiremos las APIs básicas para el manejo de gráficos en Java.

• La clase más básica es la Graphics, la cual tiene métodos que nos permiten dibujar sobre un lienzo Canvas.

• Generalmente se utilizan dentro del método paint() de un Applet o de una aplicación gráfica.

Page 6: Graficación M.C. Juan Carlos Olivares Rojas. Agenda Diseño de juegos con DirectX. OpenGL. Java3D.

Introducción

• Los métodos repaint() y update son variantes del método paint().

• El método repaint() se utiliza cuando se desea volver a dibujar la pantalla (lo cual es muy frecuente en los sistemas gráficos multitarea) y dibuja toda la pantalla. El método update() sólo actualiza una región de la pantalla. Muy utilizado en componentes gráficos como botones o listas desplegables.

Page 7: Graficación M.C. Juan Carlos Olivares Rojas. Agenda Diseño de juegos con DirectX. OpenGL. Java3D.

Introducción

• La clase Graphics se encuentra dentro del paquete java.awt.*;

• El método drawString() permite dibujar una cadena de texto en la pantalla.

• El método drawLine() dibuja una línea en la pantalla. El método drawRectangle() permite dibujar un rectángulo en pantalla.

Page 8: Graficación M.C. Juan Carlos Olivares Rojas. Agenda Diseño de juegos con DirectX. OpenGL. Java3D.

Introducción• El método drawOval permite definir óvalos y circulos.

El método drawImage() permite mostrar imágenes en pantallas.

• El método clearRect() permite borrar un área de la pantalla. El método copyArea() copia un área de memoria. Esto se utiliza en los métodos de recorte (clip).

• Métodos como drawPolygon y drawPolyline() permiten definir figuras más elaboradas.

Page 9: Graficación M.C. Juan Carlos Olivares Rojas. Agenda Diseño de juegos con DirectX. OpenGL. Java3D.

Introducción

• Los métodos que inician con fill, como fillOval(), fillRect(), etc., realizan las mismas figuras pero pintan el relleno de las figuras.

• Otros elementos a considerar para el manejo de gráficos son el color y las fuentes (tipos de letras). Java define clases para manipular estos objetos gráficos de manera amplia.

Page 10: Graficación M.C. Juan Carlos Olivares Rojas. Agenda Diseño de juegos con DirectX. OpenGL. Java3D.

Introducción• Los métodos getFont(), setFont(), getColor() y

setColor() permiten manipular fuentes y colores.

• La clases Font y Color se encuentran definidas también en java.awt.*

• El método translate() de Graphics() permite cambiar el punto de referencia que de manera predeterminada es 0,0 para esquina superior izquierda.

Page 11: Graficación M.C. Juan Carlos Olivares Rojas. Agenda Diseño de juegos con DirectX. OpenGL. Java3D.

Introducción

• La clase Color define el modelo de color a emplear, cuenta con algunas constantes para cada tipo de color como orange, yellow, darkgray, etc. El color está dado por tres valores uno para el rojo, otro para el verde y otro para el azul.

• Se cuentan además con métodos para manipular los atributos de la clase.

Page 12: Graficación M.C. Juan Carlos Olivares Rojas. Agenda Diseño de juegos con DirectX. OpenGL. Java3D.

Introducción

• La clase Font permite el manejo de fuentes en pantalla. El constructor de esta clase recibe tres argumentos: el nombre de la fuente, el estilo de la fuente y el tamaño.

• El estilo de la fuente está definido por tres constantes PLAIN (normal), BOLD (negrita) e ITALIC (cursiva). Se cuenta además con métodos auxiliares para manipular los atributos de la clase.

Page 13: Graficación M.C. Juan Carlos Olivares Rojas. Agenda Diseño de juegos con DirectX. OpenGL. Java3D.

Introducción

• Una fuente no es otra cosa que una colección de imágenes que representan los caracteres de un sistema.

• Se cuenta además con la clase FontMetrics que define algunas métricas de la fuente: altura, bajada, la subida, la interlínea, etc.

Page 14: Graficación M.C. Juan Carlos Olivares Rojas. Agenda Diseño de juegos con DirectX. OpenGL. Java3D.

Introducción

• También se pueden dibujar figuras 3D muy sencillas con métodos como draw3DRect y fill3DRect que dan profundidad a las imágenes.

Page 15: Graficación M.C. Juan Carlos Olivares Rojas. Agenda Diseño de juegos con DirectX. OpenGL. Java3D.

Introducción• Se puede obtener el contexto gráfico de una

imagen y manipularla como si fuera un objeto Graphics. Ejemplo:

Font letra = Font.getFont(Font.FACE_MONOSPACE, Font.SIZE_SMALL, Font.STYLE_PLAIN);

Image logo = Image.createImage(letra.stringWidth(“Hi!”))

Graphics gr = logo.getGraphics();

Page 16: Graficación M.C. Juan Carlos Olivares Rojas. Agenda Diseño de juegos con DirectX. OpenGL. Java3D.

Introducción

• En otro tipo de aplicaciones como en el caso de las aplicaciones para dispositivos móviles, también se pueden manipular gráficos de formas muy similares.

• El 80% de los programas de aplicación de J2ME (Java 2 Micro Edition) son juegos.

• Se sigue manipulando la clase Canvas con sus respectivos métodos y algunas variantes.

Page 17: Graficación M.C. Juan Carlos Olivares Rojas. Agenda Diseño de juegos con DirectX. OpenGL. Java3D.

Introducción

• En el caso de aplicaciones móviles se sigue manejando la clase Graphics pero dentro de otro paquete: javax.microedition.midlet.* y javax.microedition.lcdui.*, dependiendo del tipo de aplicación desarrollada.

• Las clases están dentro de diferentes Frameworks, por lo que en aplicaciones de J2SE no se pueden mezclar y confundir.

Page 18: Graficación M.C. Juan Carlos Olivares Rojas. Agenda Diseño de juegos con DirectX. OpenGL. Java3D.

Introducción

• Las aplicaciones gráficas para móviles se manejan muy parecido a lo que son aplicaciones convencionales, sólo es necesario extender la clase MIDlet.

• La clase MIDlet tiene los métodos de startApp(), pauseApp() y destroyApp(). Para manipulación de gráficos se cuenta con el método paint() y variantes.

Page 19: Graficación M.C. Juan Carlos Olivares Rojas. Agenda Diseño de juegos con DirectX. OpenGL. Java3D.

Introducción

• Existen algunas APIs especiales para el manejo de gráficos en dispositivos móviles como los definidos por Nokia (com.nokia.mid.ui) que contiene clases como DirectGraphics.

• También se pueden manejar otro tipos de elementos como multimedia, sprites, etc. También se cuenta con la clase Graphic3D para gráficas en 3D.

Page 20: Graficación M.C. Juan Carlos Olivares Rojas. Agenda Diseño de juegos con DirectX. OpenGL. Java3D.

DirectX

• La forma estándar de dibujar en el sistema operativo Windows es a través del GDI (Graphic Device Interface) que forma un anexo a la API Win32 y Win64.

• Actualmente se utiliza GDI+ que es una versión simplificada de la API ampliamente utilizada por .Net, se debe de utilizar el nombre de espacio System.Drawing.

Page 21: Graficación M.C. Juan Carlos Olivares Rojas. Agenda Diseño de juegos con DirectX. OpenGL. Java3D.

DirectX

• Algunas de las clases con las que se cuenta en este namespace son: BitMap, Brush, Brushes, Font, FontFamily, Graphics, Icon, Image, Pen y Pens, Region, SolidBrush; Enumeraciones como: FontStyle, Estructuras como: Color, Point, PointF, Rectangle, RectangleF, Size y SizeF.

• Tambien se sobreescribe el método OnPaint() para dibujar.

Page 22: Graficación M.C. Juan Carlos Olivares Rojas. Agenda Diseño de juegos con DirectX. OpenGL. Java3D.

DirectX.

• DirectX es un conjunto de componentes creados por Microsoft para el manejo de gráficos y sonidos de altas prestaciones utilizado en sistemas gráficos robustos como lo son videojuegos y algunas herramientas de autoría.

• Se tiene acceso directo al conjunto de instrucciones del microprocesador como MMX, SSE, SSE2, 3DNow de AMD, etc.

Page 23: Graficación M.C. Juan Carlos Olivares Rojas. Agenda Diseño de juegos con DirectX. OpenGL. Java3D.

DirectX

• Se puede manejar más fácilmente esta API con el uso de algunas extensiones, tal es el caso de .Net Framework en donde se manejan clases de envolturas denominadas MDX (Managed DirectX).

• Se debe incluir el espacio de nombres microsoft.DirectX. Direct3D.

Page 24: Graficación M.C. Juan Carlos Olivares Rojas. Agenda Diseño de juegos con DirectX. OpenGL. Java3D.

DirectX

• Algunas clases útiles son Device, CustomVertex, Render, etc.

• DirectX es la base para la mayoría de los juegos desarrollados en Windows. Por este motivo, Microsoft ha diseñado un framework denominado XNA para la programación de videojuegos.

Page 25: Graficación M.C. Juan Carlos Olivares Rojas. Agenda Diseño de juegos con DirectX. OpenGL. Java3D.

OpenGL

• Fue diseñada por SGI en 1992, es la librería de gráficos más utilizada para el procesamiento de imágenes en 3D.

• Se utiliza en todo tipo de arquitecturas, desde Windows, Unix, Mac OS X hasta consolas de videojuegos como PS3.

Page 26: Graficación M.C. Juan Carlos Olivares Rojas. Agenda Diseño de juegos con DirectX. OpenGL. Java3D.

OpenGL

• Existen diversas APIs pero la más estructuradas son con respecto a lenguajes como C.

• Las funciones generalmente comienzan con el prefijo gl. Ejemplo: glClear(), glMatrixMode(), glTranslatef(), glFrustum(), glBegin(), glColor3f(), glVertex3f(), glEnd().

Page 27: Graficación M.C. Juan Carlos Olivares Rojas. Agenda Diseño de juegos con DirectX. OpenGL. Java3D.

OpenGL

• Existen extensiones de terceros para poder realizar algunos cálculos especiales, por ejemplo, para ciertas tarjetas de video 3D se cuentan con funciones especiales.

• Actualmente la librería está cobrando un costo módico por hacer uso de ella en productos comerciales.

Page 28: Graficación M.C. Juan Carlos Olivares Rojas. Agenda Diseño de juegos con DirectX. OpenGL. Java3D.

Java3D

• Es una API para procesamiento digital de imágenes en 3D en lenguaje java, la cual basa su funcionamiento en OpenGL o DirectX.

• Se deriva del paquete javax.media.j3d.* También se utilizan las clases java.awt.*, y javax.vecmath.*

Page 29: Graficación M.C. Juan Carlos Olivares Rojas. Agenda Diseño de juegos con DirectX. OpenGL. Java3D.

Java3D

• A continuación se describen de manera muy generalizada algunas clases del framework de Java3D:

• Transform3D: Permite definir transformaciones de figuras 3D.

• Canvas3D: Es el elemento que nos permite dibujar en pantalla las figuras geométricas.

Page 30: Graficación M.C. Juan Carlos Olivares Rojas. Agenda Diseño de juegos con DirectX. OpenGL. Java3D.

Java3D

• BranchGroup: nos permite definir un escenario compuesto de la agrupación de varios elementos en pantalla.

• GraphicsConfiguration permite definir y obtener las características de la imagen.

• TransformGroup: permite definir un grupo de figuras 3D que modificarán su comportamiento como si fueran una unidad.

Page 31: Graficación M.C. Juan Carlos Olivares Rojas. Agenda Diseño de juegos con DirectX. OpenGL. Java3D.

¿Preguntas?