310 likes | 398 Views
Graficación. M.C. Juan Carlos Olivares Rojas. Agenda. Diseño de juegos con DirectX. OpenGL. Java3D. Introducción.
E N D
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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(); …
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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().
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.
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.*
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.
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.