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

Upload: josefa-reyes-salazar

Post on 23-Jan-2016

217 views

Category:

Documents


0 download

TRANSCRIPT

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?