|
|
|
|
Nota 1Revisión de los problemas y soluciones en el desarrollo de animaciones gráficas en Java
Nota 2Licencias del software abierto.
Nota 3Modelos de aplicaciones web independientes de la plataforma
Nota 4Lista de la seguridad en aplicaciones Web.
Nota 5Anotaciones sobre mi primer proyecto basado en XML y XSL.
Nota 6Como proteger las Aplicaciones Web de los ataques del exterior.
Nota 7Recolectores de Noticias sobre Java, XML.
Nota 8Relájate y disfruta... con Applets Java
Nota 9Entorno de desarrollo basado en XML/XSL para crear y mantener Aplicaciones Web
Nota 10Presentación del entorno de desarrollo de esta Web.
|
|
Revisión de los problemas y soluciones en el desarrollo de animaciones gráficas en Java
- Nota 1: actualizada el 15/06/2000
- Anotación:
Para explicar la parte gráfica del Visor de Cómics en Internet no viene mal un poco de información.
Mi primer libro de Java fue " Java Manual de Referencia "
[jv1] , sólo trata el java 1.0 y, aunque tiene un capítulo dedicado a los gráficos en java, sus lagunas son importantes, sobre todo
en lo referente a cuando se realiza la carga de una imagen en memoria.
Así que, el lugar donde encontré una explicación clara de lo que hicieron los chicos de Java, fue en JavaWorld , en la serie
de artículos How-To Java
[jw] , son artículos dedicados a los gráficos:
Esquema de las clases que intervienen al crear una imagen.
A modo de resumen y para fijar un esquema: en el proceso de creación de una imagen intervienen ocultas las siguientes interfaces:
- ImageProducer ( Crea la imagen o la recibe del exterior -disco, red- )
- ImageConsumer ( Recibe las notificaciones del estado de la recuperación / creación de la imagen y almacena los datos de la imagen).
- ImageObserver ( Oculta la complejidad del ImageConsumer ).
Para ocultar más:
- la clase Applet es heredera de la clase Component . Component implementa el interface ImageObserver , para que cuando se haya recibido la imagen se llame al método paint() (vía repaint() ). Con lo cual sólo hay que desarrollar el método paint() .
- Por otro lado, tenemos que la clase Component tiene el método getImage() que oculta el ImageProducer en el caso de recuperar una imagen de un fichero GIF o JPG, y el método prepareImage() oculta el trasiego entre el productor y consumidor.
- Lo mismo hacen el drawImage() de la clase Graphics y la clase MediaTracker .
Sigamos otro poco:
Miremos hacia la clase java.awt.image.MemoryImageSource , que está pensada para la animación: implementa el ImageProducer para trabajar a partir de un array de enteros (buffer de memoria). Si generamos un objeto Image , con MemoryImageSource , toda la estructura de clases hará que cuando la imagen ya esté preparada automáticamente se llame método paint() . En este método será donde pasamos del buffer de memoria a la pantalla.
Verdaderamente, todo este esfuerzo de ocultación está bien y es productivo, pero desentrañarlo, tiene tela marinera, lo mostrado
aquí es sólo el principio. A veces, se tiene la sensación de estar cazando moscas con un bazoca, cuando es del todo sabido
que un simple matamoscas, es mas rápido, eficaz y ligero.
Proceso de renderizado
Pero, si esto no es suficiente y quieres saber qué pasa dentro del proceso de renderizado, es decir, cuando ejecutas el drawImage() en el segundo capítulo del libro
[jv2] de Jonathan Knudsen , hay una excelente explicación.
La división en 5 pasos del proceso:
- transformación (determinar la forma que ha de ser randerizada)
- "rasterizer" (convertir un forma ideal en un conjunto de pixeles)
- seleccionar sólo el área que se ve afectada
- determina los colores usados
- y los combina con la imagen existente.
Con tanta teoría es necesario ver algún código fuente de un caso práctico: puedes visitar a Werner Randelshofer
[wr] un chico suizo que tiene un par de productos dedicados a la animación, y con el código fuente a tu disposición. Además ha
creado botones a lo swing compatibles con la versión de Java 1.0.2.. y utiliza el MemoryImageSource . En la dirección de Guru Gamelan
[cg] contienen más ejemplos.
Modelos para el renderizado de alto rendimiento.
Una de las base principales en el diseño de un entorno gráfico de altos requerimientos de ejecución es el uso de los hilos
(threads), y para su conocimiento completo tenemos el excelente libro Concurrent Programmning in Java de Doug Lea
[jv3] , que ya da una idea de su contenido, yo tengo el de la segunda edición, es muy completo y relativamente fácil de seguir.
Recomendable de todas, todas.
Pero si quieres soluciones más específicas para la representación gráfica de alto rendimiento, existe en la red la revista
Dr Dopps Java
[ddj] una subparte de www.byte.com, De esta revista yo resaltaría:
- Wrikting High-Perfomance Graphical Java Components (los de DJJ han retirado el ariculo) , donde se explica un caso práctico de la creación de una clase gráfica y sus trucos para conseguir una animación aceptable
cuando hay muchos cálculos y elementos gráficos. Sus consejos se pueden aplicar en otros campos.
- Java 2 Graphis Rendering
[ddj09] . Su título despista, ya que no está dedicado en exclusiva a Java 2 Graphics, sinó que, es muy útil para saber que modelos
de diseño (patterns) son útiles para un entorno gráfico de alto rendimiento. Es decir, a partir del modelo de diseño (patterns)
en "pipeline" del proceso de representación gráfica, explica dos técnicas importantes: la pila de objetos (object pooling)
y la cola de mensajes asíncronos para trabajar con un hilo, en cada una de las fases de renderizado.
Esto esta bien cuando hay que trabajar con pequeñas áreas de imagen, pero este no es mi caso y su rendimiento no era mejor
que con un solo "thread" . (Yo también estoy sorprendido, pero mis tests así lo indican, se podría pensar que es un problema
de asignación de prioridades a las hilos, pero donde se relentizaba era en el momento de realizar la imagen, ya sea en memoria
o en pantalla, y poco se puede hacer con optimizar los hilos.)
- Más sobre mensajes asíncronos: An Asynchronous Design Pattern.
[ddj06]
Relacion de enlaces:
- jv1:
Java Manual de Referencia
- Obsborne McGraw-hill (ISBN: 84-481-1131-1)
- Firmado por: Naughton y Schilt
- Schilt es un conocido autor de libros sobre el lenguaje C y C++, Naughton fue uno de los desarrolladores del Java que lo avandono
poco antes de ser presentado.
- jv2:
Java 2D Graphics
- Editorial O'Rell (ISBN: 1-56592-484-3)
- Firmado por: Jonathan Knudsen
- El libro se centra en la nuevas librerias gráficas del Java 1.2, asi como la lógica interna del renderizado, (que puede servirte
para entender otros modelos de renderizado ), cuidado con utilizarlas en applets, los navegadores versiones 4 y 5 no las implementan.
- jv3:
Concurrent Programmning in Java (Design Principles and Patters)
- Editorial Sun y Addison-Wesley
- Firmado por: Doug Lea
- jw:
JavaWorld How-To Java
- http://www.javaworld.com
- http://www.javaworld.com/javaworld/topicalindex/jw-ti-howto.html
- Fecha del documento / revisión enlace: 07/2000/
- Relación de artículos de la excelente revista el eléctronica JavaWorld que muestran las posibilidades y como se aplican en
casos practicos las librerias Java. Cada mes hay un nuevo artículo. Además, en todos ellos hay enlaces útiles que complementan
la información.
- jw02:
Learn how applets load network-based images asynchronously
- http://javaworld.com/javaworld/jw-02-1997/jw-02-howto.html
- Firmado por: Todd Sunsetd
- Primero de los tres capítulos. Subtitulado como un mirada cercana a como los applets de Java trabajan con las imagenes en
entorno de red.
- jw03:
How Java uses the producer /consumer model to handel imagens - An insider´s look
- http://javaworld.com/javaworld/jw-03-1997/jw-03-howto.html
- Firmado por: Todd Sunsetd
- Segundo capítulo
- jw04:
When static images just don´t make the cut
- http://javaworld.com/javaworld/jw-04-1997/jw-04-howto.html
- Firmado por: Todd Sunsetd
- Tercer capítulo dedicado ha realizar animaciones aprovechando el modelo proveedor / consumidor.
- wr:
Werner Randelshofer
- http://www.randelshofer.ch
- Firmado por: Werner Randelshofer
- cg:
Code Guru
- http://codeguru.earthweb.com/java
- Fecha del documento / revisión enlace: 07/2000
- Tiene una lista immensa de programas java clasificados, tutoriales, pero sin seleccionar
- ddj:
Writing High-Perfomance Graphical Java Components
- http://www.ddj.com/topics/java/articles.htm?topic=java
- ddj09:
Java 2 Graphis Rendering . (An architecture for extreme animation)
- http://www.ddj.com/articles/1999/9909/9909a/9909a.htm?topic=java
- ddj06:
An Asynchronous Design Pattern
- http://www.ddj.com/articles/1996/9606/9606d/9606d.htm?topic=java
- Firmado por: Allan Vermeulen
Ferrán Casasús Rodó a: 15/06/2000
Subir
Por favor, da tu opinión?
|