Download - 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](https://reader036.vdocuments.co/reader036/viewer/2022062519/5665b48e1a28abb57c92271d/html5/thumbnails/1.jpg)
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](https://reader036.vdocuments.co/reader036/viewer/2022062519/5665b48e1a28abb57c92271d/html5/thumbnails/2.jpg)
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](https://reader036.vdocuments.co/reader036/viewer/2022062519/5665b48e1a28abb57c92271d/html5/thumbnails/3.jpg)
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](https://reader036.vdocuments.co/reader036/viewer/2022062519/5665b48e1a28abb57c92271d/html5/thumbnails/4.jpg)
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](https://reader036.vdocuments.co/reader036/viewer/2022062519/5665b48e1a28abb57c92271d/html5/thumbnails/5.jpg)
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](https://reader036.vdocuments.co/reader036/viewer/2022062519/5665b48e1a28abb57c92271d/html5/thumbnails/6.jpg)
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](https://reader036.vdocuments.co/reader036/viewer/2022062519/5665b48e1a28abb57c92271d/html5/thumbnails/7.jpg)
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](https://reader036.vdocuments.co/reader036/viewer/2022062519/5665b48e1a28abb57c92271d/html5/thumbnails/8.jpg)
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](https://reader036.vdocuments.co/reader036/viewer/2022062519/5665b48e1a28abb57c92271d/html5/thumbnails/9.jpg)
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](https://reader036.vdocuments.co/reader036/viewer/2022062519/5665b48e1a28abb57c92271d/html5/thumbnails/10.jpg)
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](https://reader036.vdocuments.co/reader036/viewer/2022062519/5665b48e1a28abb57c92271d/html5/thumbnails/11.jpg)
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](https://reader036.vdocuments.co/reader036/viewer/2022062519/5665b48e1a28abb57c92271d/html5/thumbnails/12.jpg)
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](https://reader036.vdocuments.co/reader036/viewer/2022062519/5665b48e1a28abb57c92271d/html5/thumbnails/13.jpg)
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](https://reader036.vdocuments.co/reader036/viewer/2022062519/5665b48e1a28abb57c92271d/html5/thumbnails/14.jpg)
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](https://reader036.vdocuments.co/reader036/viewer/2022062519/5665b48e1a28abb57c92271d/html5/thumbnails/15.jpg)
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](https://reader036.vdocuments.co/reader036/viewer/2022062519/5665b48e1a28abb57c92271d/html5/thumbnails/16.jpg)
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](https://reader036.vdocuments.co/reader036/viewer/2022062519/5665b48e1a28abb57c92271d/html5/thumbnails/17.jpg)
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](https://reader036.vdocuments.co/reader036/viewer/2022062519/5665b48e1a28abb57c92271d/html5/thumbnails/18.jpg)
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](https://reader036.vdocuments.co/reader036/viewer/2022062519/5665b48e1a28abb57c92271d/html5/thumbnails/19.jpg)
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](https://reader036.vdocuments.co/reader036/viewer/2022062519/5665b48e1a28abb57c92271d/html5/thumbnails/20.jpg)
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](https://reader036.vdocuments.co/reader036/viewer/2022062519/5665b48e1a28abb57c92271d/html5/thumbnails/21.jpg)
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](https://reader036.vdocuments.co/reader036/viewer/2022062519/5665b48e1a28abb57c92271d/html5/thumbnails/22.jpg)
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](https://reader036.vdocuments.co/reader036/viewer/2022062519/5665b48e1a28abb57c92271d/html5/thumbnails/23.jpg)
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](https://reader036.vdocuments.co/reader036/viewer/2022062519/5665b48e1a28abb57c92271d/html5/thumbnails/24.jpg)
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](https://reader036.vdocuments.co/reader036/viewer/2022062519/5665b48e1a28abb57c92271d/html5/thumbnails/25.jpg)
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](https://reader036.vdocuments.co/reader036/viewer/2022062519/5665b48e1a28abb57c92271d/html5/thumbnails/26.jpg)
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](https://reader036.vdocuments.co/reader036/viewer/2022062519/5665b48e1a28abb57c92271d/html5/thumbnails/27.jpg)
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](https://reader036.vdocuments.co/reader036/viewer/2022062519/5665b48e1a28abb57c92271d/html5/thumbnails/28.jpg)
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](https://reader036.vdocuments.co/reader036/viewer/2022062519/5665b48e1a28abb57c92271d/html5/thumbnails/29.jpg)
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](https://reader036.vdocuments.co/reader036/viewer/2022062519/5665b48e1a28abb57c92271d/html5/thumbnails/30.jpg)
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](https://reader036.vdocuments.co/reader036/viewer/2022062519/5665b48e1a28abb57c92271d/html5/thumbnails/31.jpg)
¿Preguntas?