Beruflich Dokumente
Kultur Dokumente
Estos cambios fueron realizados por Oscar Javier Abaunza Garca, docente de la
UNAD, CEAD Bucaramanga, ingeniero de sistemas, especialista en educacin
superior a distancia, en su desempeo como tutor y director del curso a nivel
nacional.
INTRODUCCIN
Intencionalidades Formativas
Propsitos
Aportar a la fundamentacin terica del estudiante, como base para la
construccin de un discurso coherente y sustentado, a travs de la
profundizacin en la terminologa, fundamentos tecnolgicos, fsicos y
matemticos de la representacin grfica en el computador.
Objetivos
Comprender y emplear los diferentes conceptos relacionados con el la
representacin de grficos en el computador y los componentes hardware y
software necesarios partiendo de los fundamentos tericos y tecnolgicos de
esta disciplina.
Identificar el establecimiento de un sistema de coordenadas en la pantalla
del computador como base fundamental para la graficacin a travs del
estudio de los fundamentos matemticos que la estructuran.
Competencias
El estudiante describe y caracteriza de manera adecuada los conceptos y
elementos tecnolgicos relacionados con la presentacin de grficos en el
computador.
Metas
Al finalizar esta unidad didctica el estudiante estar en capacidad de:
Productos de Aprendizaje
Individual
A corto plazo:
A largo plazo:
Leccin 4 La revolucin
Sin duda la dcada de cambios ms vertiginosos fue la de 1980. El surgimiento de
las mquinas PC, aunque con capacidades grficas limitadas, permiti la
popularizacin de sistemas y aplicaciones que crearon un mercado exigente y
competitivo (por ejemplo con el Autocad). Tambin comenzaron a disearse
herramientas grficas de interfaz hombre mquina, como por ejemplo el sistema
operativo de la Macintosh II, los lenguajes de programacin visual y el hipertexto. El
rol que no alcanzaron a cumplir los Comits de estandarizacin (por ejemplo, el
GSK fue aprobado recin en 1985, cuando haca varios aos que ya era obsoleto)
fue cubierto por las compaas comerciales que al crear una aplicacin novedosa
se transformaban en estndares de facto en el mercado (por ejemplo el Poscript, el
OpenGL y X Windows).
Tambin esta dcada marc el segundo cambio de paradigma, porque la evolucin
de los modelos grficos, junto con la capacidad de representacin de los monitores
y la integracin de los sistemas grficos a otro tipo de aplicaciones (simulaciones
en ingeniera, sensores remotos, datos de satlites, etc.) permiti desarrollar
herramientas para la representacin grfica de conjuntos enormemente complejos
de datos. Estas ideas, que con el tiempo fueron el fundamento de la Visualizacin
Cientfica, apelan a la enorme capacidad de comprensin visual humana. De esa
manera es posible representar, por ejemplo, millones de datos meteorolgicos en
un nico grfico que permite comprender a golpe de vista las caractersticas
esenciales de una determinada situacin climtica.
1950
o Ben Laposky cre las primeras imgenes grficas, un osciloscopio,
generado por una mquina electrnica (anloga). La imagen fue
producida manipulando vigas electrnicas y registrndolas sobre una
pelcula alta de la velocidad.
1951
o UNIVAC-I: la primera computadora comercial de propsito general,
usaba dispositivos en copia dura e impresoras de lnea.
o MIT WirldWind: la primera computadora que permita mostrar vdeo
en tiempo real, era capaz de exhibir texto y erfico en tiempo real en
una pantalla grande de osciloscopio.
En los aos 60: El comienzo de los grficos interactivos modernos, salida son
grficos vectoriales y grficos interactivos. Uno de los grandes problemas era el
costo y la inaccesibilidad de las mquinas.
1960
o Guillermo Fetter acua el trmino computacin grfica para describir
nuevos mtodos de diseo
1961
o Steve Russel, primer juego de video Spacewars
1963
o Douglas Englebart - primer ratn
o Ivan Sutherland - Sketchpad. Sistema interactivo de CG, un sistema
grfico de comunicacin humano-computadora.
Mens pop-up
Modelamiento jerrquico
Utiliz un lpiz de luz para la interaccin.
o Sutherland formul las ideas de usar primitivas para el dibujo de
lneas, polgonos, arcos, etc.; desarroll los algoritmos de dragging,
rubberbanding y transformacin; introdujo las estructuras de datos
para almacenar. Es considerado el fundador de los grficos por
computadora.
1964
o Guillermo Fetter - Primer modelo por computador de una figura
humana
1965
o Jack Bresenham - Algoritmo para el dibujo de lneas
1968
o Tektronix - Un computador basado en tubos de rayos catdicos, que
permita el almacenamiento, el teclado y el ratn, un computador con
una interfaz simple de US$15.000, que permita el uso de grficos.
o Ivan Sutherland Primer display head-mounted
1969
o Jhon Warnock - Algoritmo de la subdivisin de rea, algoritmos de
superficies ocultas.
o Laboratorios Bell Primer frambuffer que contiene 3 bits por pixel.
1972
o Nolan Kay Bushnell - Pong, juego de video
1973
o Juan Whitney Jr. y Gary Demos - "Westworld", primera pelcula con
grficos de computador
1974
o Edwin Catmuff - mapeo de texturas y algoritmo z-buffer para
superficies ocultas.
o James Blinn - superficies curvas y refinamiento del algoritmo de
mapeo de texturas.
o Phone Bui-Toung - iluminacin especular
1975
o Martin Newell - la famosa tetera que identifica la computacin grfica,
construida con curvas de Bezier.
o Benoit Mandelbrot - dimensin fractal/fraccional
1976
o James Blinn - mtodo para simular reflexiones especulares sobre
objetos
1977
o Steve Wozniak - Apple II, computador personal con grficos a color
1979
o Roy Trubshaw y Richard Bartle - Dominios multi-usuario (MUD Phone Bui-Toung - specular highlighting)
En los aos 80 los dispositivos de salida incorporan los grficos de rster imgenes
de mapas de bit (bitmap) y el pixel. Los costos de los computadores personales
decrecen dramticamente, el ratn y el trackball se convierten en los dispositivos
interactivos estndares.
1982
o Steven Lisberger - "Tron", la primera pelcula de Disney que hace
uso intensivo de los grficos tridimensionales
o Tom Brighman - "Morphing" primera secuencia de pelcula juega con
un carcter femenino que deforma y se transforma a s misma en la
forma de un lince
o Jhon Walkner y Dan Drake AutoCAD
1983
o Jaron Lanier - "DataGlove", una pelcula de realidad virtual que usa
un guante instalado con interruptores y sensores para detectar el
movimiento de la mano.
1984
o Tech de Wavefron - Polhemus, primer software paras grficos en 3D
1985
o Pixar Animation Studios. Cortometrajes Luxo Jr. - 1989 y Tin toy
o NES Sistema de juegos casero Nintendo
1987
o IBM - VGA (Video Graphics Array) Se introdujo el arreglo de grficos
de video.
1989
o Video Electronics Standards Association (VESA) SVGA, Super VGA
En los aos 90, desde la introduccin del VGA y el SVGA, el computador personal
puede mostrar fcilmente imgenes fotorealistas y pelculas. La optimizacin de las
imgenes en 3D comienza su principal avance estimuladas por las aplicaciones
para grficos usadas en el cine.
1990
o Hanrahan and Lawson - Renderman
1991
o Disney y Pixar - Beauty and the Beast, CGI fue ampliamente
utilizada, el sistema Renderman proporciona rapidez, precisin y alta
calidad a los efectos por computador.
1992
o Silicon Graphics - Especificacin OpenGL
1993
o Universidad de Illinois - Mosaic. Primer navegador web grfico.
o Steven Spielberg - Jurassic Park una exitosa pelcula de ciencia
ficcin a partir de efectos de computacin grfica.
1995
o Buena Vista Pictures - Toy Stroy el primer
completamente generado en computador
o NVIDIA Corporation - GeForce 256 (GeForce3 (2001)
2003
o ID Software - Motor de grficos Doom.
largometraje
pulgada. Su unidad de medida son las muestras por pulgada (spi, samples per
inch). Cuantas ms muestras por pulgada tenga una imagen escaneada, ms
cercana estar la imagen digital a la imagen original. Esta forma de medir la
resolucin se utiliza poco, habindose adoptado como medida de calidad de una
imagen escaneada los pxeles por pulgada (ppp) que tiene la imagen digital
resultante del proceso.
Una forma comn de clasificar las imgenes segn su resolucin es aquella que las
divide en imgenes de alta resolucin (hi-res) e imgenes de baja resolucin (lowres). Una imagen de alta resolucin est prevista para la impresin, teniendo
generalmente 300 ppp o ms. Una imagen de baja resolucin est prevista
solamente para su exhibicin en pantalla, teniendo generalmente una resolucin de
100 ppp o menos.
pueden tomar los puntos x,y en el espacio de pantalla, estos valores dependen de
la resolucin del monitor.
La transformacin de sistemas de coordenadas que es posible realizar en los
procesos de graficacin en 2D y 3D se explicarn en las unidades didcticas
correspondientes.
Figura 13 Espectro con los 6 colores apreciados por Newton (violeta, azul, verde, amarillo, naranja y rojo)
As, la luz blanca, esa luz que rodea al ser humano, est formada por luz de seis
colores; y cuando incide en algn cuerpo ste absorbe alguno de dichos colores y
refleja otros. Esto da lugar al siguiente principio: Todos los cuerpos opacos, al ser
iluminados, reflejan todos o parte de los componentes de la luz que reciben.
En la prctica, y para comprender mejor este fenmeno, se dir que, por ejemplo,
un tomate rojo absorbe el verde y el azul y refleja el rojo; y un pltano amarillo
absorbe el color azul y refleja los colores rojo y verde, los cuales, sumados,
permiten ver el color amarillo.
El color es una sensacin subjetiva y nadie puede asegurar a ciencia cierta que
percibe los colores igual que otro. De todas formas los hombres vemos ms o
menos igual y partiendo de esta premisa se deber estudiar la teora del color.
Aprender a ver el color y obtener una interpretacin de sus propiedades inherentes
ha de ser el punto de partida si se desea realizar un tratamiento eficaz de ste en
las distintas aplicaciones grficas que se construyen.
Los conos se concentran en una regin cerca del centro de la retina llamada fvea.
Su distribucin sigue un ngulo de alrededor de 2 contados desde la fvea. La
cantidad de conos es de 6 millones y algunos de ellos tienen una terminacin
nerviosa que va al cerebro.
Los conos son los responsables de la visin del color y se cree que hay tres tipos
de conos, sensibles a los colores rojo, verde y azul, respectivamente. Dada su
forma de conexin a las terminaciones nerviosas que se dirigen al cerebro, son los
responsables de la definicin espacial. Tambin son poco sensibles a la intensidad
de la luz y proporcionan visin fotpica (visin a altos niveles).
Los bastones se concentran en zonas alejadas de la fvea y son los responsables
de la visin escotpica (visin a bajos niveles). Los bastones comparten las
terminaciones nerviosas que se dirigen al cerebro, siendo por tanto su aportacin a
la definicin espacial poco importante. La cantidad de bastones se sita alrededor
de 100 millones y no son sensibles al color. Los bastones son mucho ms
sensibles que los conos a la intensidad luminosa, por lo que aportan a la visin del
color aspectos como el brillo y el tono, y son los responsables de la visin nocturna.
Existen grupos de conos especializados en detectar y procesar un color
determinado, siendo diferente el total de ellos dedicados a un color y a otro. Por
ejemplo, existen ms clulas especializadas en trabajar con las longitudes de onda
correspondientes al rojo que a ningn otro color, por lo que cuando el entorno en
que nos encontramos nos enva demasiado rojo se produce una saturacin de
informacin en el cerebro de este color, originando una sensacin de irritacin en
las personas.
Cuando el sistema de conos y bastoncillos de una persona no es el correcto se
pueden producir una serie de irregularidades en la apreciacin del color, al igual
que cuando las partes del cerebro encargadas de procesar estos datos estn
daadas. Esta es la explicacin de fenmenos como la Daltonismo. Una persona
daltnica no aprecia las gamas de colores en su justa medida, confundiendo los
rojos con los verdes.
Debido a que el proceso de identificacin de colores depende del cerebro y del
sistema ocular de cada persona en concreto, es posible medir con toda exactitud la
longitud de onda de un color determinado, pero el concepto del color producido por
ella es totalmente subjetivo, dependiendo de la persona en s. Dos personas
diferentes pueden interpretar un color dado de forma diferente, y puede haber
tantas interpretaciones de un color como personas hay.
Los colores aditivos son los usados en trabajo grfico con monitores de ordenador,
ya que el monitor produce los puntos de luz partiendo de tres tubos de rayos
catdicos, uno rojo, otro verde y otro azul. Por este motivo, el modelo de definicin
de colores usado en trabajos digitales es el modelo RGB (Red, Green, Blue).
Todos los colores que se visualizan en el monitor estn en funcin de las
cantidades de rojo, verde y azul utilizadas. Por ello, para representar un color en el
sistema RGB se le asigna un valor entre 0 y 255 (notacin decimal) o entre 00 y FF
(notacin hexadecimal) para cada uno de los componentes rojo, verde y azul que lo
forman. Los valores ms altos de RGB corresponden a una cantidad mayor de luz
blanca. Por consiguiente, cuanto ms altos son los valores RGB, ms claros
son los colores.
De esta forma, un color cualquiera vendr representado en el sistema RGB
mediante la sintaxis decimal (R,G,B) o mediante la sintaxis hexadecimal
#RRGGBB. El color rojo puro, por ejemplo, se especificar como (255,0,0) en
notacin RGB decimal y #FF0000 en notacin RGB hexadecimal, mientras que el
color rosa claro dado en notacin decimal por (252,165,253) se corresponde con el
color hexadecimal #FCA5FD.
Esta forma aditiva de percibir el color no es nica. Cuando la luz solar choca contra
la superficie de un objeto, ste absorbe diferentes longitudes de onda de su
espectro total, mientras que refleja otras. Estas longitudes de onda reflejadas son
precisamente las causantes de los colores de los objetos, colores que por ser
producidos por filtrado de longitudes de onda se denominan colores sustractivos.
Este fenmeno es el que se produce en pintura, donde el color final de una zona va
a depender de las longitudes de onda de la luz incidente reflejadas por los
pigmentos de color de la misma.
Un coche es de color azul porque absorbe todas las longitudes de onda que forman
la luz solar, excepto la correspondiente al color azul, que refleja, mientras que un
objeto es blanco porque refleja todo el espectro de ondas que forman la luz, es
decir, refleja todos los colores, y el resultado de la mezcla de todos ellos da como
resultado el blanco. Por su parte, un objeto es negro porque absorbe todas las
longitudes de onda del espectro: el negro es la ausencia de luz y de color.
El matiz del color (Hue), tambin conocido como tono es el color en s mismo,
supone su cualidad cromtica, es -simplemente- un sinnimo de color. Es la
cualidad que define la mezcla de un color con blanco y negro. Est relacionado con
la longitud de onda de su radiacin. Segn su tonalidad se puede decir que un
color es rojo, amarillo, verde.
La saturacin est relacionada con la pureza cromtica o falta de dilucin con el
blanco. Constituye la pureza del color respecto al gris, y depende de la cantidad de
blanco presente. Cuanto ms saturado est un color, ms puro es y menos mezcla
de gris posee.
Figura 20 Saturacin
El brillo (Value) o brillantez tiene que ver con la intensidad o el nivel de energa. Es
la luminosidad de un color (la capacidad de reflejar el blanco. Alude a la claridad u
oscuridad de un tono. Es una condicin variable, que puede alterar
fundamentalmente la apariencia de un color. La luminosidad puede variar
aadiendo negro o blanco a un tono.
limitada, sino porque los colores son definibles con poca precisin en algunos
casos. Si bien el ojo humano detecta aproximadamente 350.000 colores diferentes
(y es capaz de distinguir aproximadamente 50.000 en forma simultnea), esta
sensibilidad no es uniforme en todo el espacio cromtico, sino que es mucho mayor
en ciertas reas (por ejemplo en el eje naranja-violeta) y mucho menor en otras
(por ejemplo en el eje magenta-verde).
De los 256K colores definibles, miles de ellos son idnticamente percibidos,
mientras que otros no se representan con una fidelidad adecuada. En otras
palabras, el espacio RGB es una forma muy ineficiente de representar colores
porque la informacin est codificada de una manera muy incoherente con
respecto a la capacidad del ojo.
En los modos grficos true color el problema se soluciona con un costo muy grande
(3 bytes por pixel es mucho ms de lo necesario). Sin embargo, hay personas con
visin cromtica muy sensible que siguen encontrando diferencias de matiz entre
colores contiguos en la gama del amarillo-anaranjado y del violceo.
Probablemente la mejor solucin hubiera sido contar con tecnologa CSV en las
tarjetas grficas, dado que la conversin al RGB del monitor se puede hacer dentro
de la controladora de video.
Plotters: Grafican en una hoja (que en algunos casos puede ser de gran tamao)
sobre la cual se desliza una pluma movida por motores de pasos de gran precisin.
Figura 22 Plotter
Resolucin
Nmero de colores
320x200
640x200
640x200
640x350
640x200
640x480
320x200
320x200
640x480
1024x768
1024x768
1280x1024
640x480
800x600
1024x768
1280x1024
1600x1200
...
4
2
16
16
2
2
4
256
16
256 (entrelazado)
256 (no entrelazado)
256 (entrelazado)
256
32k
64k
16.8M
CPU
Arbitro
Frame
Buffer
Generador de video
MONITOR
Figura 23 Componentes bsicos de una
tarjeta grfica
Tarjeta grfica
Frame
Buffer
Generador
de video
MONITOR
Bus Local
CPU
RAM
Figura 27 Dispositivos apuntadores indirectos: ratn, touchpad, trackpoint, joystick, tableta grfica, etc.
Los ratones (mouse) suelen estar constituidos por una caja con una forma ms o
menos anatmica en la que se encuentran dos botones que harn los famosos
clics de ratn siendo transmitidos por el cable al puerto PS/II o al puerto de serie.
Los ratones mecnicos mantienen dentro de esta caja una bola que sobresale de la
caja a la que se pegan 4 rodillos ortogonalmente dispuestos que sern los que
definan la direccin de movimiento del ratn. El ratn se mueve por una alfombrilla
ocasionando el movimiento de la bola que a su vez origina el movimiento de uno o
varios de estos rodillos que se transforma en seales elctricas y producen el
efecto de desplazamiento del ratn por la pantalla del ordenador.
Existen modelos en los que la transmisin se hace por infrarrojos eliminando por
tanto la necesidad de cableado. Otros presentan la bola en la parte superior de la
caja no estando por tanto en contacto con la alfombrilla y teniendo que ser movida
por los dedos del usuario aunque se origina el mismo efecto. Otros utilizan diodos
emisores de luz (led), para capturar el movimiento del ratn, en este caso se
denominan ratones pticos.
Los paquetes de animacin consisten en uno o varios mdulos con los que es
posible modelar, animar y dar apariencia real a un objeto. En un principio, las
empresas de animacin programaban su propio software con el cual luego
trabajaban. Poco a poco fueron surgiendo distintos programas, los cuales podan
ser adquiridos a travs de una licencia de uso.
El proceso de creacin de grficos 3D por computadora puede ser dividido en estas
tres fases bsicas:
Modelado
Composicin de la escena
Rnder (creacin de la imagen final)
general, hace uso de una tcnica llamada "Keyframing" (cuadros clave), que facilita
la creacin de movimientos complicados en la escena. Con la ayuda de la tcnica
de keyframing, en lugar de tener que corregir la posicin de un objeto, su rotacin o
tamao en cada cuadro de la animacin, solo se necesita marcar algunos cuadros
clave (keyframes). Los cuadros entre keyframes son generados automticamente,
lo que se conoce como 'Interpolacin'.
La iluminacin es un aspecto importante de la composicin de la escena. Como en
la realidad, la iluminacin es un factor importante que contribuye al resultado
esttico y a la calidad visual del trabajo terminado. Por eso, puede ser un arte difcil
de dominar. Los efectos de iluminacin pueden contribuir en gran medida al humor
y la respuesta emocional generada por la escena, algo que es bien conocido por
fotgrafos y tcnicos de iluminacin teatral.
Tesselation y mallas. El proceso de transformar la representacin de objetos,
como el punto medio de coordenadas de una esfera y un punto en su
circunferencia, en una representacin poligonal de una esfera, se conoce como
tesselation. Este paso es usado en el rnder basado en polgonos, donde los
objetos son descompuestos de representaciones abstractas primitivas como
esferas, conos, etctera, en las denominadas mallas, que son redes de tringulos
interconectados.
Las mallas de tringulos son populares ya que est probado que son fciles de
'renderizar' usando Scanline rendering.
Las representaciones poligonales no son utilizadas en todas las tcnicas de rnder,
y en estos casos, el paso de tesselation no es incluido en la transicin de
representacin abstracta y la escena 'renderizada'.
Renderizado. Se llama rnder al proceso final de generar la imagen 2D o
animacin a partir de la escena creada. Esto puede ser comparado a tomar una
foto o en el caso de la animacin, a filmar una escena de la vida real.
Generalmente se buscan imgenes de calidad fotorrealista, y para este fin se han
desarrollado muchos mtodos especiales. Las tcnicas van desde las ms
sencillas, como el rnder de alambre (wireframe rendering), pasando por el rnder
basado en polgonos, hasta las tcnicas ms modernas como el Scanline
Rendering, el Raytracing, la radiosidad o el Mapeado de fotones.
El software de rnder puede simular efectos cinematogrficos como el lens flare, la
profundidad de campo, o el motion blur (desenfoque de movimiento). Estos
artefactos son, en realidad, un producto de las imperfecciones mecnicas de la
fotografa fsica, pero como el ojo humano est acostumbrado a su presencia, la
Junto a estos paquetes mayores, hay otros que no se han ganado tal aceptacin
general, pero que no son simples juguetes. Algunos son:
Cada software tiene sus ventajas y desventajas frente a los dems, pero la
posibilidad de realizar un trabajo de calidad no depende de esto, sino de los
conocimientos, la creatividad, y no tanto del software.
Adems del software especializado, es comn el manejo de APIs especializadas
para facilitar los procesos en todas las etapas de la generacin de grficos por
computadora. Estas APIs han demostrado ser vitales para los desarrolladores de
hardware para grficos por computadora, ya que proveen un camino al
programador para acceder al hardware de manera abstracta, aprovechando las
ventajas de tal o cual tarjeta de video.
Las siguientes APIs para grficos por computadora son particularmente populares:
OpenGL
Direct3D (subconjunto de DirectX para producir grficos interactivos en 3D)
RenderMan
Fecha
de
OUTING, Steve. News sites repeat mistakes of the past. We still dont recognize
the power of interactivity. Editor & Publisher. 4 de Mayo. VNU eMedia Inc.
Consultado
en
abril
de
2002
en:
www.editorandpublisher.com/editorandpublisher/features_columns/article_display.js
p?vnu_content_id=1461161
PASCUAL BRONCANO, Pedro J. y GUTIRREZ, Antonio.
Conceptos
fundamentales
de
computacin
grfica.
[En
lnea]
http://www.ii.uam.es/~pedro/graficos/teoria/Conceptos/ConceptosFundamentales.ht
Intencionalidades Formativas
Propsitos
Introducir al estudiante en el conocimiento de los principales algoritmos y
estructuras de datos utilizados en Computacin Grfica para modelar y
visualizar escenas en 2 y 3 dimensiones, como fundamento para la
visualizacin grfica en el computador.
Proporcionar al estudiante los lineamientos tecnolgicos bsicos que le
permitan utilizar libreras grficas (Ej. OpenGL) en conjunto con lenguajes de
programacin estructurada como JAVA.
Objetivos
Conocer los algoritmos necesarios para el trazado de curvas en dos
dimensiones, a partir del estudio de su origen matemtico, geomtrico y la
Productos de Aprendizaje
Individual
Leccin 16 JDK
El JDK (Java Development Kit) comprende todas las herramientas necesarias para
la programacin en JAVA, a continuacin se presenta una relacin de sus
principales componentes:
java
javac
bytecode de Java.
appletviewer
javadoc
jar
//package prueba;
public nclase() {
System.out.print("Texto a mostrar");
// Fin de la clase
char
byte
short
int
long
float
double
18.2. Caracteres
En Java los caracteres no estn limitados a los presentes en la tabla ASCII, son
Unicode. Un caracter se presenta siempre entre comillas simples ej. 'A', '5', '', etc.
El tipo de dato char se emplea para almacenar estos caracteres.
Un tipo especial de caracteres comprenden la secuencia de escape, empleados
para representar caracteres de control o caracteres que no se imprimen. Una
secuencia de escape est formada por la barra invertida (\) y un caracter. La
siguiente tabla presenta las secuencias de escape ms utilizadas.
\r
Retorno de carro (hace que se mueva el cursor a la primera posicin de una lnea)
\t
\n
\\
18.3 Variables
booleanas
enteras
en coma flotante
Valores constantes
Netbeans: NetBeans es un proyecto de cdigo abierto de gran xito con una gran
base de usuarios, una comunidad en constante crecimiento, y con cerca de 100
socios en todo el mundo. Sun MicroSystems fund el proyecto de cdigo abierto
NetBeans en junio de 2000 y contina siendo el patrocinador principal de los
proyectos.
La plataforma NetBeans permite que las aplicaciones sean desarrolladas a partir de
un conjunto de componentes de software llamados mdulos. Un mdulo es un
archivo Java que contiene clases de java escritas para interactuar con las APIs de
NetBeans y un archivo especial (manifest file) que lo identifica como mdulo. Las
aplicaciones construidas a partir de mdulos pueden ser extendidas agregndole
nuevos mdulos. Debido a que los mdulos pueden ser desarrollados
independientemente, las aplicaciones basadas en la plataforma NetBeans pueden
ser extendidas fcilmente por otros desarrolladores de software.
Modularidad. Todas las funciones del IDE son provistas por mdulos. Cada mdulo
provee una funcin bien definida, tales como el soporte de Java, edicin, o soporte
para el sistema de control de versiones. NetBeans contiene todos los mdulos
necesarios para el desarrollo de aplicaciones Java en una sola descarga,
permitindole al usuario comenzar a trabajar inmediatamente.
Gestin de proyectos
Plantillas de proyecto
Finalizacin de cdigo
interfaz de depuracin
Editor con resaltado de sintaxis
Asistentes
Interfaz de usuario totalmente personalizable
20.1 Compilacin
Al emplear la herramienta de compilacin, JCreator hace el llamado al compilador
de JAVA ejecutando el programa javac.exe.
20.2 Ejecucin
Una vez compilado el programa en JAVA, se genera un nuevo archivo en el
directorio original con la extensin .class, el cual puede ser interpretado ejecutando
el programa java.exe.
x = (x1 - x0 ) 0,
y = (y1 - y0 ) 0, y
x y.
mismo pixel. Por el contrario, un valor muy grande determinara que el segmento
aparezca punteado en vez de ser continuo como corresponde. Un valor prctico
es elegir x = 1 y por lo tanto n = x, es decir, la discretizacin tiene tantos pixeles
como longitud tiene el segmento en la variable que ms vara (ms uno, dado que
la secuencia tiene n + 1 puntos). Al mismo tiempo es fcil ver que
3. Java no tiene una sentencia bsica para dibujar puntos (pixeles), en este
caso se utiliza la sentencia g.drawRect (lnea 35) para dibujar un rectngulo
con un ancho y alto de 0, que en su ejecucin se traduce a pintar un nico
pixel ubicado en el punto enviado como parmetro.
4. En la misma sentencia g.drawRect (lnea 35) se utiliza el casting a enteros
para lograr la discretizacin de las coordenadas flotantes.
centro del pixel elegido y el segmento de recta, medida en direccin del eje Y
positivo del espacio de pantalla (es decir, hacia abajo). Si el error en p fuese cero,
entonces al ir hacia E el error pasa a ser m (la pendiente del segmento), y en D el
error pasa a ser m - 1 (ver Figura 44).
Paso a E : e = e + m
Paso a D : e = e + m 1
Por lo tanto, la eleccin del paso E o D depende de que el valor absoluto de e+m
sea o no menor que el valor absoluto de e+m-1. Expresado de otra manera, sea e
el error en un determinado pixel. Si e +m> 0.5 entonces el segmento de recta pasa
ms cerca del pixel D, y si no, pasa ms cerca del pixel E (ver Figura 45).
Una de las economas de cmputo del mtodo proviene de poder evaluar el error
preguntando por cero. Es fcil ver que si se inicializa el error en e = m 0.5
entonces en cada paso hay que chequear e >0 para elegir D. La otra economa
proviene de realizar manipulaciones algebraicas para efectuar un cmputo
equivalente pero en aritmtica entera. Como se evala el error por cero, multiplicar
el error por una constante no afecta el resultado. Por lo tanto, multiplicamos el error
por 2x. A partir de dicho cambio, se constatan las siguientes igualdades:
e0 2x
0.5 2y x
x
Paso a E : e = e+2y
Paso a D: e = e+2(y-x)
x r * cos
y r * sen
Estas ecuaciones sern las que ocuparemos para calcular cada punto (x,y) del
crculo, donde el r ser obviamente el radio de crculo y ser el ngulo que forma
el radio con la parte positiva del eje x. En forma grfica sera as:
El ngulo deber estar en radianes ya que las funciones de seno y coseno que
incluye Java, trabajan con los ngulos en radianes. La frmula para transformar
grados a radianes es la siguiente:
radianes
gra dos *
180
Como se podr deducir del cdigo el objeto Punto incluye las coordenadas x e y de
un punto en el plano cartesiano.
CAPTULO 6 Transformaciones
Naturalmente, as como se desean dibujar grficos, tambin se desea moverlos,
rotarlos, cambiar su tamao, etc. En esta seccin se presentan los principales
fundamentos matemticos que subyacen al proceso de transformacin de los
grficos en dos dimensiones, a partir de lo mostrado por el euitmt WWW team de la
Universidad de Oviedo. Se espera que el estudiante en su proceso de
profundizacin realice los algoritmos que permitan hacer estas transformaciones.
Una de las mayores virtudes de los grficos generados por ordenador es la
facilidad con se pueden realizar algunas modificaciones sobre las imgenes. Un
gerente puede cambiar la escala de las grficas de un informe. Un arquitecto puede
ver un edificio desde distintos puntos de vista. Un cartgrafo puede cambiar la
escala de un mapa. Un animador puede modificar la posicin de un personaje.
Estos cambios son fciles de realizar porque la imagen grfica ha sido codificada
en forma de nmeros y almacenada en el interior del ordenador. Los nmeros son
susceptibles a las operaciones matemticas denominadas transformaciones.
De forma matemtica A = AI
Por tanto, la matriz T es una aplicacin entre el punto original P1 y el nuevo punto
P2. Si suponemos la imagen compuesta por los vrtices de un polgono. Qu
pasar si transformamos cada uno de los puntos mediante una multiplicacin por
una matriz T y dibujamos el resultado? Qu aspecto tendr esta nueva imagen?
La respuesta, por supuesto, depende de los elementos de la matriz T. Si, por
ejemplo, escogemos la matriz identidad entonces la imagen no se ver alterada.
Sin embargo, si escogemos la matriz
entonces
Cada una de las nuevas coordenadas x tiene el doble de valor que las antiguas.
Las lneas horizontales sern dos veces ms largas en la nueva imagen. La nueva
imagen tendr la misma altura, pero parecer que la hemos estirado hasta alcanzar
el doble del ancho original.
antes de la transformacin
despus de la transformacin
Leccin 28 Rotacin
La siguiente transformacin grfica que vamos a ver es la rotacin. Para introducir
esta transformacin recordaremos brevemente algunos conceptos trigonomtricos.
Sea un punto p1=(x1, y1) y lo giramos alrededor del origen un ngulo para pasar
a una nueva posicin p2=(x2, y2). Queremos encontrar la transformacin que
convierte (x1, y1) en (x2, y2). Pero, antes de comprobar si alguna transformacin
es la adecuada, debemos saber primero que (x2, y2) debe escribirse en funcin de
(x1, y1) y . Para esto es necesario recordar las razones trigonomtricas de seno y
coseno.
De forma anloga:
Dando
A la vista de estas ecuaciones podemos imaginar una matriz que relacione las
coordenadas del punto original y del punto girado:
Para una rotacin en el sentido de las agujas del reloj, basta sustituir en la
expresin anterior el valor del ngulo por - . As nos queda
se convierte en
Si aplicamos esta matriz a un punto (xw, yw, w) obtenemos
Si dividimos ahora por el tercer valor w tenemos (Exx, Eyy) que es el punto correcto
cambiado de escala.
La rotacin es
transformar
un
punto
podemos
realizar
la
siguiente
multiplicacin
Cabe destacar que esta matriz se puede formar tambin mediante una rotacin
inicial de ngulo y una traslacin definida por los valores contenidos en la tercera
fila.
1 0
0 -1 Reflexin respecto al eje x
-1 0
0 -1 Reflexin respecto al origen
0
1
1
0
0 -1
-1 0 Reflexin respecto a la recta y=-x
1 a
0 1
Deformacin en el eje y
1
b
Deformacin en el eje x
0
1
Las primeras tres reflexiones son simples cambios de escala pero con factores
negativos. Las simetras respecto a las rectas y=x e y=-x pueden realizarse
mediante un cambio de escale y un giro posterior. Es posible realizar las
deformaciones mediante una secuencia de rotaciones y cambios de escala, aunque
es mucho ms fcil aplicar la matriz resultante. De igual forma se pueden construir
transformaciones de cambio de escala y rotacin a partir de las deformaciones.
C.
[En
[En
lnea]
lnea]
Intencionalidades Formativas
Propsitos
Introducir al estudiante en el conocimiento de los principales algoritmos y
estructuras de datos utilizados en Computacin Grfica, especialmente en la
generacin de grficos en dos dimensiones.
Proporcionar al estudiante los lineamientos tecnolgicos bsicos que le
permitan utilizar API grficas en conjunto con lenguajes de programacin de
alto nivel, para el proceso de modelamiento y construccin de escenarios
grficos en 2D y 3D.
Objetivos
Programar ejercicios de llenado de reas y transformaciones de figuras en
dos dimensiones, utilizando libreras grficas y lenguajes de programacin,
partiendo de la conceptualizacin geomtrica respectiva.
Productos de Aprendizaje
Individual
el API Java 2D es posible dibujar lneas con estilos, de cualquier ancho y formas
geomtricas rellenas con virtualmente cualquier textura.
Las formas geomtricas se proporcionan a travs de implementaciones de la
interfaz Shape, por ejemplo las figuras Rectangle2D y Ellipse2D. Las curvas y los
arcos tambin son implementaciones especficas de la interfaz Shape.
Los rellenos y estilos de lpiz (denominado Filete en mltiples aplicaciones de
dibujo) se proporcionan a travs de implementaciones de las interfaces Paint y
Stroke, por ejemplo: BasicStroke, GradientPaint, TexturePaint y Color.
La implementacin AffineTransform define transformaciones lineales
coordenadas 2D, incluyendo el escalado, rotacin, traslacin y recortado.
de
...
fill
drawImage
Aunque el sistema de coordenadas para una ventana o una pantalla podra ser
muy distinto que para una impresora, estas diferencias son invisibles para los
programas Java. Las conversiones necesarias entre el espacio de usuario y el
espacio de dispositivo se realizan automticamente durante el dibujado.
Espacio de usuario
Como se muestra en la Figura 55, el origen del espacio de usuario se localiza en la
esquina superior izquierda del espacio, con los valores de x incrementando a la
derecha y los valores de y incrementando hacia abajo.
El espacio del usuario representa una abstraccin uniforme de todas los posibles
sistemas de coordenadas de dispositivos. El espacio de dispositivo para un
dispositivo particular podra tener el mismo origen y direccin del espacio del
usuario, o podran ser diferentes. Sin embargo, las coordenadas del espacio del
usuario son automticamente transformadas en las apropiadas para el espacio del
dispositivo cuando se dibuja un objeto grfico. Frecuentemente, la plataforma
subyacente o driver del dispositivo se utilizan para desarrollar esta conversin.
Espacio de dispositivo
El API 2D de Java define tres niveles de informacin de configuracin que se
mantienen para permitir la conversin desde un espacio de usuario a un espacio de
dispositivo. Esta informacin est encapsulada en tres clases:
GraphicsEnvironment
GraphicsDevice
GraphicsConfiguration
Transformaciones
El API Java 2D ha unificado su modelo de transformacin de coordenadas. Todas
las transformaciones de coordenadas, incluyendo transformaciones desde el
espacio del usuario al espacio del dispositivo, son representadas por objetos de la
clase AffineTransform, que define las reglas para manipular coordenadas usando
matrices.
Es posible adicionar un AffineTransform al contexto grfico para rotar, escalar,
trasladar o recortar una figura geomtrica, texto o imagen cuando se esta
renderizando. La transformacin adicional se aplica a cualquier objeto grfico
renderizado en ese contexto. La transformacin se realiza cuando el espacio de
coordenadas de usuario se convierte en espacio de coordenadas del dispositivo.
32.2 Fuentes
Una cadena se asume de manera normal, en trminos de los caracteres que la
conforman. Cuando se dibuja una cadena, su apariencia est determinada por la
letra o fuente que est seleccionada. Sin embargo, las figuras que la fuente usa
para mostrar la cadena no siempre corresponden con caracteres individuales, por
ejemplo, en publicidad profesional, ciertas combinaciones de dos o ms caracteres
se reemplazan a menudo por una figura simple denominada ligature.
Las figuras que una fuente usa para representar los caracteres en las cadenas se
denominan Glyphs. Una fuente puede representar un carcter como una a con
tlde usando varios glyphs, o representar ciertas combinaciones de caracteres
como la fi de final con un nico glyph. En el API Java 2D, una glyph es
32.3 Imgenes
Las imgenes son colecciones de pxeles organizados espacialmente. Un pxel
define la apariencia de una imagen en una ubicacin simple. Un arreglo
bidimensional de pxeles se denomina una rster.
La apariencia del pxel puede definirse directamente o como un ndice en una tabla
de color para una imagen. En imgenes que contienen muchos colores (ms de
256), los pxeles usualmente representan directamente el color, alpha y otras
caractersticas de cada localizacin de la pantalla. Tales imgenes tienden a ser
muchos ms grandes que las imgenes de color indexado (indexed-color
images), pero ellas son ms realistas.
En una imagen de color indexado, los colores en la imagen estn limitados a los
colores especificados en una tabla de colores, a menudo, el resultado es que slo
es posible usar unos pocos colores en la imagen. Sin embargo, un ndice requiere
menos almacenamiento que un valor de color, por tanto el resultado es que las
imgenes de colores indexados son ms pequeas. El formato de pxel es popular
para las imgenes que contienen slo 16 o 256 colores.
Las imgenes en el API 2D de java tiene dos componentes primarios:
Los patrones de rellenos estn definidos por objetos que implementan la interfaz
Paint. La clase Color, que est disponible en versiones anteriores de AWT, es un
tipo simple de un objeto Saint usado para definir rellenos de colores slidos. El API
2D de Java proporciona dos implementaciones adicionales para Paint,
TexturePaint y GradientPaint.
En Java 2D, el renderizado de la lnea exterior y el relleno de una figura son dos
operaciones separadas:
Usando el mtodo draw se dibuja el contorno (lnea exterior) de la figura usando el
estilo de lpiz especificado en el atributo Stroke y el patrn de relleno especificado
por el atributo Paint.
Usado el mtodo fill se rellena el interior de la figura con el patrn especificado en
el atributo Paint.
Cuando se renderiza una cadena de texto, el atributo actual de Paint se aplica a los
glyphs que forman la cadena. Sin embargo, drawString actualmente rellena los
glyphs que estn siendo renderizados. Para modificar el filete del contorno de los
glyphs en una cadena de texto, es necesario enviar el contorno y renderizarlos
como figuras usando el mtodo draw.
java.awt.image.renderable
El paquete java.awt contiene algunas clases e interfaces del API Java 2D,
obviamente no todas las clases del java.awt son clases del Java 2D.
AlphaComposite
BasicStroke
Color
Composite
CompositeContext
Font
GradientPaint
Graphics2D
GraphicsConfiguration
GraphicsDevice
GraphicsEnvironment
Paint
PaintContext
Rectangle
Shape
Stroke
TexturePaint
Transparency
Arc2D
Arc2D.Double
Arc2D.Float
Area
CubicCurve2D
CubicCurve2D.Double
CubicCurve2D.Float
Dimension2D
Ellipse2D
Ellipse2D.Double
Ellipse2D.Float
FlatteningPathIterator
GeneralPath
Line2D
Line2D.Double
Line2D.Flota
PathIterator
Point2D
Point2D.Double
Point2D.Float
QuadCurve2D
QuadCurve2D.Double
QuadCurve2D.Float
Rectangle2D
Rectangle2D.Double
Rectangle2D.Float
RectangularShape
RoundRectangle2D
RoundRectangle2D.Double
RoundRectangle2D.Float
Muchas de las primitivas geomtricas tienen sus correspondientes
implementaciones .Float y .Double. Las implementaciones de doble precisin
proporcionan mayor precisin de renderizado, pero a expensas del desempeo en
algunas plataformas.
GlyphJustificationInfo
GlyphMetrics
GlyphVector
GraphicAttribute
ImageGraphicAttribute
LineBreakMeasurer
LineMetrics
MultipleMaster
OpenType
ShapeGrapicAttribute
TextAttribute
TextHitInfo
TextLayout
TransformAttribute
ICC_ColorSpace
ICC_ProfileGray
ICC_ProfileRGB
ICC_Profile
BandCombineOp
BandedSampleModel
BufferedImage
BufferedImageFilter
BufferedImageOp
ByteLookupTable
ColorConvertOp
ColorModel
ComponentColorModel
ComponentSampleModel
ConvolveOp
ContextualRenderedImageFactory
DataBuffer
DataBufferByte
DataBufferInt
DataBufferShort
DataBufferUShort
DirectColorModel
IndexColorModel
Kernel
LookupOp
LookupTable
MultiPixelPackedSampleModel
PackedColorModel
ParameterBlock
PixelInterleavedSampleModel
Rster
RasterOp
RenderableImage
RenderableImageOp
RenderContext
RenderableImageProducer
RenderedImageFactory
RenderedImage
RescaleOp
SampleModel
ShortLookupTable
TileObserver
WritableRaster
WritableRenderedImage SinglePixelPackedSampleModel
El API Java 2D mejora las siguientes clases heredadas de la clase image de AWT
ColorModel
DirectColorModel
IndexColorModel
Estas clases de modelo de color recogen las caractersticas del java.awt.image
para compatibilidad, y para mantener consistencia, las nuevas clases del modelo
de color tambin estn localizadas en el paquete java.awt.image.
El paquete java.awt.print contiene clases e interfaces que hacen posible la
impresin de todos los objetos grficos basados en Java 2D, como texto, grficos e
imgenes.
Book
Pageable
PageFormat
Paper
Printable
PrinterGraphics
PrinterJob
Antes de comenzar en serio con los componentes grficos que proporciona el API
2D de java, es necesario, hacer una pequea revisin de la clase Graphics,
superclase de Graphics2D y revisar algunos conceptos bsicos acerca del contexto
grfico, que posteriormente permitirn comprender mucho mejor los ejemplos que
se presentarn.
Ellipse2D
QuadCurve2D
Area
GeneralPath
Rectangle2D
CubicCurve2D
Line2D
RectangularShape
Dimension2D
Point2D
RoundRectangle2D
Excepto para Point2D y Dimension2D, cada una de las otras clases geomtricas
implementa el interfaz Shape, que proporciona un conjunto de mtodos comunes
para describir e inspeccionar objetos geomtricos bi-dimensionales.
Con estas clases podemos crear de forma virtual cualquier forma geomtrica y
dibujarla a travs de Graphics2D llamando al mtodo draw o al mtodo fill.
36.2 GeneralPath
La clase GeneralPath permite crear una curva arbitraria especificando una serie de
posiciones a lo largo de los lmites de la forma.
Estas posiciones pueden ser conectadas por
segmentos de lnea, curvas cuadrticas o curvas
cbicas.
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import javax.swing.*;
/*
* La clase se crea como hija de la clase Applet. Si se define como hija
* directa de la clase Frame, se tiene problemas al redimensionar el
* Frame, ya que no se redibujan automticamente las figuras.
*/
while ( !fontFits ) {
if ( (fontMetrics.getHeight() <= maxCharHeight)
&& (fontMetrics.stringWidth(longString) <= xSpace) ) {
fontFits = true;
}
else {
if ( size <= minFontSize ) {
fontFits = true;
}
else {
g2.setFont(font = new Font(name,
style,
--size));
fontMetrics = g2.getFontMetrics();
}
}
}
return fontMetrics;
}
/* Toma las dimensiones del contexto y lo divide para saber el ancho y alto de
* cada una de las celdas de la cuadrcula donde dibujar
*/
Dimension d = getSize();
int gridWidth = d.width / 6;
int x = 5;
int y = 7;
int rectWidth = gridWidth - 2*x;
int stringY = gridHeight - 3 - fontMetrics.getDescent();
int rectHeight = stringY - fontMetrics.getMaxAscent() - y - 2;
g2.setStroke(stroke);
/* Asigna el filete, crea unos vectores con las coordenadas de los puntos del polgono,
* crea el objeto GeneralPath (polygon) trazando lineas entre las coordenadas
* y finalmente cierra el poligono. Dibuja el polgono y el texto inferior
* correspondiente.
*/
g2.setStroke(stroke);
int x1Points[] = {x, x+rectWidth, x, x+rectWidth};
int y1Points[] = {y, y+rectHeight, y+rectHeight, y};
GeneralPath polygon = new GeneralPath(GeneralPath.WIND_EVEN_ODD, x1Points.length);
polygon.moveTo(x1Points[0], y1Points[0]);
for ( int index = 1; index < x1Points.length; index++ ) {
polygon.lineTo(x1Points[index], y1Points[index]);
};
polygon.closePath();
g2.draw(polygon);
/* Realiza los mismo pasos que para el polgono anterior, lo que vara es
* que en este caso no se cierra el polgono
*/
int x2Points[] = {x, x+rectWidth, x, x+rectWidth};
int y2Points[] = {y, y+rectHeight, y+rectHeight, y};
GeneralPath polyline = new GeneralPath(GeneralPath.WIND_EVEN_ODD, x2Points.length);
polyline.moveTo (x2Points[0], y2Points[0]);
for ( int index = 1; index < x2Points.length; index++ ) {
polyline.lineTo(x2Points[index], y2Points[index]);
};
g2.draw(polyline);
g2.drawString("GeneralPath (Abierto)", x, stringY);
x += gridWidth;
/* Define los arreglos de las coordenadas para el polgono. Crea el polgono uniendo
* los puntos con lneas. Asigna el color rojo y dibuja el polgono relleno.
* Retorna el valor de la pintura a negro y dibuja el polgono mediante draw, lo
* que origina que se sibuje el filete del polgono.
*/
int x3Points[] = {x, x+rectWidth, x, x+rectWidth};
int y3Points[] = {y, y+rectHeight, y+rectHeight, y};
GeneralPath filledPolygon = new GeneralPath(GeneralPath.WIND_EVEN_ODD,
x3Points.length);
filledPolygon.moveTo(x3Points[0], y3Points[0]);
for ( int index = 1; index < x3Points.length; index++ ) {
filledPolygon.lineTo(x3Points[index], y3Points[index]);
};
filledPolygon.closePath();
g2.setPaint(Color.yellow);
g2.fill(filledPolygon);
El siguiente cdigo crea una curva cuadrtica con dos puntos finales y un punto de
control. Las posiciones de los puntos se seleccionan con respecto al tamao de la
ventana.
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import javax.swing.*;
Dimension d = getSize();
int w = d.width;
int h = d.height;
//Dibuja la curva
g2.draw(quad);
//Crea el Frame
JFrame f = new JFrame("Dibujando un QuadCurve2D");
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {System.exit(0);}
});
Leccin 37 reas
Con la clase Area se pueden realizar operaciones boolenas, como uniones,
intersecciones y substracciones, sobre dos objetos Shape cualquiera. Esta tcnica,
permite crear rpidamente objetos Shape complejos sin tener que describir cada
lnea de segmento o cada curva, este proceso se denomina construir un rea
geomtrica (CAG). Una Area soporta las siguientes operaciones booleanas.
unin
Sustraccin
Interseccin
Or-Exclusivo
(XOR)
/*
* Este applet dibuja una pera, usando mtodos de Constructive Area Geometry (CSG)
setBackground(Color.white);
}
g2.setColor(Color.green);
g2.setColor(Color.black);
/* Crea el pedazo de tronco a partir del llenado del Area resultante de la sustraccin de
* dos objetos Area creados a partir de una elipse.
*/
stem.setFrame(ew, eh-42, 40.0, 40.0);
st1 = new Area(stem);
stem.setFrame(ew+3, eh-47, 50.0, 50.0);
st2 = new Area(stem);
st1.subtract(st2);
g2.fill(st1);
g2.setColor(Color.yellow);
Para controlar la fuente que se utiliza para dibujar el texto, es necesario enviar los
atributos de la fuente al contexto Graphics2D antes de renderizar. Los atributos de
la fuente se envan pasando un objeto Font al mtodo setFont. En este ejemplo,
los atributos son envidos al construir el nuevo objeto Font y la cadena se dibuja en
el centro del componente usando esta fuente. Cada vez que se modifiquen los
atributos, se construye un nuevo objeto Font y se enva al contexto Graphics 2D en
el metodo Paint() para que sean redibujados. El mtodo getFontMetrics permite
medir la longitud en pxeles de la cadena considerando los nuevos atributos, de
manera que siempre se dibuje en el centro del componente.
g2.setFont(thisFont);
String cadena = "Seleccione una fuente, tamao y estilo para modificarme";
FontMetrics medida = g2.getFontMetrics();
int ancho = medida.stringWidth( cadena );
int alto = medida.getHeight();
//Dibuja la cadena en el centro del panel correspondiente
g2.drawString( cadena, w/2-ancho/2, h/2-alto/2 );
import java.lang.Integer;
import java.awt.*;
import java.awt.font.*;
import java.awt.geom.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Vector;
/*Se asignan los valores para el combo de tamao, los posibles tamaos sern 10,
*12,14,16,18. Se define como mximo nmero de filas a mostrar 9. Se agrega el
combo
*al panel correspondiente.
/*Se arma el combo de estilo a partir de los estilos predeterminados.se siguen los mismo
*pasos que para los combos anteriores y finalmente se incluye el combo en el panel
*correspondiente.
*/
cmbEstilo = new JComboBox( new Object[]{
"PLAIN",
"BOLD",
"ITALIC",
"BOLD & ITALIC"} );
cmbEstilo.setMaximumRowCount( 9 );
cmbEstilo.addItemListener(this);
cmbTamano.setMaximumRowCount( 9 );
pnlEstilo.add(cmbEstilo);
Font thisFont;
public pnlLetra(){
thisFont = new Font("Arial", Font.PLAIN, 10);
}
// Este mtodo es el que modifica la fuente de acuerdo con los nuevos parmetros
public void cambiarFuente(String nf, int nest, String ntam){
Integer nuevoTam = new Integer(ntam);
int tam = nuevoTam.intValue();
thisFont = new Font(nf, nest, tam);
repaint();
}
g2.setColor(Color.darkGray);
g2.setFont(thisFont);
String cadena = "Seleccione una fuente, tamao y estilo para modificarme";
FontMetrics medida = g2.getFontMetrics();
int ancho = medida.stringWidth( cadena );
int alto = medida.getHeight();
//Dibuja la cadena en el centro del panel correspondiente
g2.drawString( cadena, w/2-ancho/2, h/2-alto/2 );
}
}
Leccin 39 Imgenes
El API 2D de Java implementa un nuevo modelo de imagen que permite la
manipulacin de imgenes de resolucin fija almacenadas en memoria. La clase
BufferedImage es una nueva clase Image en el paquete java.awt.image, que puede
usarse para manipular datos de una imagen recuperados desde un archivo o una
URL. Por ejemplo, se puede usar un BufferedImage para implementar doble bfer .
es
un
Un
un
los
Figura 66 Clase BufferedImage (Sun Microsystems)
Transformacin afin
Escalado
Modificacin de Aspecto
Combinacin Linear de Bandas
Conversin de color
Convolucin.
2.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.image.*;
import java.awt.geom.AffineTransform;
import java.awt.font.TextLayout;
g2.setColor(Color.black);
float[][] datos = {{0.1f, 0.1f, 0.1f,
switch ( i ) {
case 0 :
case 1 : x = i==0?5:anchoap/2+3; y = 15;
Kernel kernel = new Kernel(3,3,datos[i]);
ConvolveOp cop = new ConvolveOp(kernel,
ConvolveOp.EDGE_NO_OP,
null);
cop.filter(vectorbi[i],biorig);
bitrans = new AffineTransformOp(transformacion,
AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
break;
case 2 : x = 5; y = altoap/2+15;
byte chlut[] = new byte[256];
for ( int j=0;j<200 ;j++ )
chlut[j]=(byte)(256-j);
ByteLookupTable blut=new ByteLookupTable(0,chlut);
LookupOp lop = new LookupOp(blut, null);
lop.filter(vectorbi[i],biorig);
bitrans = new AffineTransformOp(transformacion,AffineTransformOp.TYPE_BILINEAR);
break;
case 3 : x = anchoap/2+3; y = altoap/2+15;
RescaleOp rop = new RescaleOp(1.1f,20.0f, null);
rop.filter(vectorbi[i],biorig);
bitrans = new AffineTransformOp(transformacion,AffineTransformOp.TYPE_BILINEAR);
}
un
componente
Swing,
ste
utiliza
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
import java.awt.image.*;
/* Toma las coordenas de la ltima vez que el usuario presiono el mouse y se ejecut
* el evento mousePressed.
*/
int ult_x, ult_y;
boolean primeraVez = true;
TexturePaint texturaRelleno, texturaFilete;
Rectangle area;
/* Esta variable es True si el usuario di clic o movio el mouse fuera del area del rectangulo,
* falso de lo contrario
*/
// Maneja el evento cuando el usuario arrastra el mouse miesntras mantiene presionado el botn.
public void mouseDragged(MouseEvent e){
if(!estaFuera){
updateLocation(e);
} else {
BufferedShapeMover.lblTexto.setText("Posicione el cursor en el rectngulo y luego
arrastre");
}
}
/* Chequea si el cursor est dentro del rectngulo cuando el usuario suelta el botn del mouse
* e.getX y e.getY proporcionan las coordenadas donde se solt el botn
*/
if(rect.contains(e.getX(), e.getY())){
updateLocation(e);
} else {
BufferedShapeMover.lblTexto.setText("Posicione el cursor en el rectngulo y luego
arrastre");
estaFuera = false;
}
}
/* Si el mtodo chequearRect retorna verdadero actualiza el contenido del texto para que
* muestre la localizacin actual del rectngulo, de lo contrario muestr un mensaje
*/
if (chequearRect()) {
BufferedShapeMover.lblTexto.setText("Rectngulo localizado en " +
rect.getX() + ", " +
rect.getY());
} else {
BufferedShapeMover.lblTexto.setText("Por favor no intente arrastrar el rectngulo"+
" fuera del rea");
}
repaint();
}
if(primeraVez){
Dimension dim = getSize();
int ancho = dim.width;
int alto = dim.height;
Adems del paquete corazn de Java 3D, se usan otros paquetes para escribir
programas Java 3D. Uno de estos paquetes es com.sun.j3d.utils al que
normalmente se hace referencia como clases de utilidades de Java 3D. El paquete
de las clases corazn incluye slo las clases de menor nivel necesarias en la
programacin Java 3D.
Las clases de utilidades son adiciones convenientes y poderosas al corazn. Estas
clases se dividen en cuatro categoras: cargadores de contenidos, ayudas a la
construccin del escenario grfico, clases de geometra y utilidades de
conveniencia.
Al utilizar las clases de utilidades se reduce significativamente el nmero de lneas
de cdigo en un programa Java 3D. Adems de las clases de los paquetes corazn
y de utilidades de Java 3D, todo programa 3D usa clases de los paquetes java.awt
y javax.vecmath.
En el resto del texto, el trmino objeto visual se utilizar para hacer referencia a un
"objeto del escenario grfico" (por ejemplo, un cubo o una esfera). El trmino objeto
slo se usar para referirse a un ejemplar de una clase. El trmino contenido se
usar para referirnos a objetos visuales en un escenario grfico como un todo.
Es posible crear un escenario grfico ilegal. Se puede ver uno en la Figura 71. Este
escenario es ilegal porque viola las propiedades de un DAG. El problema son los
dos objetos TransformGroup(TG) que tienen al mismo objeto Shape3D como hijo.
Recuerda que una hoja slo puede tener un padre. En otras palabras, slo puede
haber un camino desde el objeto Locale hasta la hoja (o un camino desde la hoja
hasta el objeto Locale).
Cada escenario grfico tiene un slo VirtualUniverse. Este objeto tiene una lista de
objetos Locale. Un objeto Locale proporciona una referencia a un punto en el
universo virtual. Se puede pensar en los objetos Locale como marcas de tierra que
determinan la localizacin de los objetos visuales en el universo virtual.
Es tcnicamente posible para un programa Java 3D tener ms de un objeto
VirtualUniverse, y as definir ms de un universo virtual. Sin embargo, no hay
ninguna forma de comunicacin entre los universos virtuales. Adems, un objeto de
Clase Node
La clase Node es una superclase abstracta de las clases Group y Leaf. Esta clase
define algunos de los mtodos importantes de sus subclases. Las subclases de
Node componen escenarios grficos.
Clase Group
La clase Group es la superclase usada en especificacin de localizacin y
orientacin de objetos visuales en el universo virtual. Dos de las subclases de
Esta receta ignora algunos detalles pero ilustra el concepto fundamental para toda
la programacin Java 3D: crear la rama grfica del escenario grfico es la
programacin principal. En vez de ampliar esta receta, los siguientes prrafos
explican una forma sencilla de construir un escenario grfico muy similar con
menos programacin.
Los programas Java 3D escritos usando la receta bsica tienen ramas de vista
grfica con idntica estructura. La regularidad de la estructura de las ramas de vista
grfica tambien se encuentra en la clase de utilidad SimpleUniverse. Los
ejemplares de esta clase realizan los pasos 2, 3 y 4 de la receta bsica. Usando la
clase SimpleUniverse en programacin Java 3D se reduce significativamente el
tiempo y el esfuerzo necesario para crear las ramas de vista grfica.
Consecuentemente, el programador tiene ms tiempo para concentrarse en el
contenido. Esto es de lo que se trata el escribir programas Java 3D.
La clase SimpleUniverse es un buen punto de inicio en la programacin Java 3D,
porque permite al programador ignorar las ramas de vista grfica. Sin embargo,
usar SimpleUniverse no permite tener varias vistas de un universo virtual.
La clase SimpleUniverse se usa en todos los ejemplos de programacin de este
tutorial.
La clase SimpleUniverse
El constructor de SimpleUniverse crea un escenario grfico que incluye un objeto
VirtualUniverse y Locale, y una rama de vista grfica completa. Esta rama grfica
creada usa un ejemplar de las clases de conveniencia ViewingPlatform y Viewer en
lugar de las clases corazn usadas para crear una rama de vista grfica. Observe
que SimpleUniverse slo usa indirectamente los objetos View y ViewPlatform del
corazn Java 3D. Los objetos SimpleUniverse suministran la funcionalidad de todos
los objetos que hay dentro del recuadro azul de la Figura 74.
Figura 74 Universo virtual mnimo proporcionado por la clase SimpleUniverse (en azul)
Constructores de SimpleUniverse
Paquete: com.sun.j3d.utils.universe
Esta clase configura un entorno de usuario mnimo para obtener rpida y fcilmente
un programa Java 3D y ejecutarlo.
Esta clase de utilidad crea todos los objetos necesarios para la rama de vista
grfica. Especificamente crea los objetos Locale, VirtualUniverse, ViewingPlatform,
y Viewer (todos con sus valores por defecto). Los objetos tiene las relaciones
apropiadas para formar la rama de vista grfica.
un
sencillo
universo
El objeto SimpleUniverse crea una rama de vista grfica completa para un universo
virtual. Esta rama incluye un plato de imagen. Un plato de imagen es el rectngulo
conceptual donde se proyecta el contenido para formar la imagen renderizada. El
objeto Canvas3D, que proporciona una imagen en una ventana de nuestra pantalla,
puede ser el plato de imagen.
La Figura 75 muestra la relacin entre el plato de imagen, la posicin del ojo, y el
universo virtual. La posicin del ojo est detrs del plato de imagen. Los objetos
visuales delante del plato de imagen son renderizados en el plato de imagen. El
renderizado puede ser como una proyeccin de los objetos visuales sobre el plato
de imagen. Esta idea se ilustra con los cuatro proyectores de la imagen (lneas
punteadas).
Los tpicos programas Java 3D mueven la vista haca atrs (z positivo) para hacer
que los objetos se acerquen, al origen dentro de la vista. La clase SimpleUniverse
tiene un miembro que es un objeto de la clase ViewingPlatform. Esta clase tiene un
mtodo setNominalViewingTransform que selecciona la posicin del ojo para que
est centrado en (0, 0, 2.41) buscando en direccin z negativa hacia el origen.
Los tres fragmentos de cdigo anteriores (Figura 76, Figura 77 y Figura 78) forman
un programa Java 3D completo cuando se usan las sentencias import adecuadas.
A continuacin se pueden ver las sentencias import necesarias para compilar la
clase HelloJava3Da. Las clases ms comunmente usadas en Java 3D se
encuentran en los paquetes javax.media.j3d, o javax.vecmath.
Como no se explica cada lnea de cdigo del ejemplo HelloJava3Da, las ideas
bsicas de ensamblar un programa Java 3D deberan estar claras habiendo ledo el
ejemplo. La siguiente seccin presenta cada una de las clases usadas en el
programa.
Clase Canvas3D
La clase Canvas3D deriva de la clase Canvas del AWT. Por lo menos un objeto
Canvas3D debe ser referenciado en la rama de vista grfica del escenario grfico.
El constructor de Canvas3D es:
Canvas3D(GraphicsConfiguration graphicsconfiguration)
Construye
e
inicializa un nuevo objeto Canvas3D que el Java 3D puede renderizar dando un
objeto GraphicsConfiguration vlido. Es una extensin de la clase Canvas del AWT.
Clase Transform3D
Los objetos Transform3D representan transformaciones de geometras 3D como
una traslacin o una rotacin. Estos objetos normalmente slo se usan en la
creaccin de un objeto TransformGroup. Primero, se construye el objeto
Transform3D, posiblemente desde una combinacin de objetos Transform3D.
Luego se construye el objeto TransformGroup usando el objeto Transform3D.
Un objeto de transformacin generalizado se representa internamente como una
matriz de 4x4 doubles de punto flotante. La representacin matemtica es la mejor
forma. Un objeto Transform3D no se usa en un escenario grfico. Se usa para
especificar la transformacin de un objeto TransformGroup.
El constructor por defecto de Transform3D
Transform3D()
Construye un objeto Transform3D que representa la matriz de
identidad (no la transformacin).
Un objeto Transform3D puede representar una traslacin, una rotacin, un
escalado, o una combinacin de stas. Cuando se especifica una rotacin, el
ngulo se expresa en radianes. Una rotacin completa es 2 PI radianes. Una forma
de especificar ngulos es usar la constante Math.PI. Otra forma es especificar los
valores directamente. Algunas aproximaciones son: 45 es 0.785, 90 es 1.57, y
180 es 3.14.
A continuacin se presenta una lista parcial de mtodos de Transform3D
void rotX(double angle) Selecciona el valor de esta transformacin a una
rotacin en contra del sentido del reloj sobre el eje-x. El ngulo se especifica en
radianes.
Clase TransformGroup
Como una subclase de la clase Group, los ejemplares de TransformGroup se usan
en la creaccin de escenarios grficos y tienen una coleccin de objetos nodos
como hijos. Los objetos TransformGroup contienen transformaciones geomtricas
como traslaciones y rotaciones. La transformacin normalmente se crea en un
objeto Transform3D, que no es un objeto del escenario grfico.
Los contructores de TransformGroup son:
TransformGroup() Construye e inicializa un TransformGroup usando una identidad
de transformacin.
TransformGroup(Transform3D t1) Construye e inicializa un TransformGroup
desde un objeto Transform3D t1 pasado como parmetro.
La transformacin contenida en un objeto Transform3D se copia a un objeto
TransformGroup o cuando se crea el TransformGroup, o usando el mtodo
setTransform(). As:
void setTransform(Transform3D t1) Selecciona el componente de transformacin
de este TransformGroup a partir del valor de de la transformacin pasada en el
parmetro t1.
Clase Vector3f
Vector3f es una clase matemtica que se encuentra en el paquete javax.vecmath
para especificar un vector usando tres valores de punto flotante para las
coordenadas x, y, e z. Los objetos Vector se usan frecuentemente para
Clase ColorCube
ColorCube es una clase de utilidad que se encuentra en el paquete
com.sun.j3d.utils.geometry que define la geometra y colores de un cubo
centrado en el origen y con diferentes colores en cada cara, ColorCube extiende la
clase Shape3D, por lo tanto, es un nodo hoja. Si un cubo sin rotar se sita en el
origen (como en HelloJava3Da), se ver la cara roja desde la localizacin de visin
nominal. Los otros colores son azul, magenta, amarillo, verde y cian.
Los coonstructores de ColorCube son:
ColorCube() Construye un cubo de color del tamao por defecto. Por defecto, una
esquina est situada a 1 unidad de cada uno de los ejes desde el origen,
resultando un cubo que est centrado en el origen y tiene 2 unidades de alto, de
ancho y de profundo.
ColorCube(double scale) Construye un cubo de color escalado por el valor
especificado. El tamao por defecto es 2 unidades de lado. El ColorCube resultante
tiene esquinas en (scale, scale, scale) y (-scale, -scale, -scale).
.
Leccin 44 Rotacin de objetos
Una simple rotacin del cubo puede hacer que se vea ms de una de sus caras. El
primer paso es crear la transformacin deseada usando un objeto Transform3D.
El fragmento de cdigo de la Figura 82 incorpora un objeto TransformGroup en el
escenario grfico para rotar el cubo sobre el eje x. Primero se crea la
transformacin de rotacin usando el objeto rotate de Transform3D, en la linea 24.
rotate.rotX(Math.PI/4.0d);
tempRotate.rotY(Math.PI/5.0d);
rotate.mul(tempRotate);
objRoot.addChild(objRotate);
objRotate.addChild(new ColorCube(0.4));
simpleU.getViewingPlatform().setNominalViewingTransform();
simpleU.addBranchGraph(scene);
} // Fin del constructor HelloJava3Db
Capacidades
Una vez que una rama grfica empieza a vivir o es compilada el sistema de
renderizado Java 3D la convierte a una representacin interna ms eficiente. El
efecto ms importante de esta conversin es la mejora del rendimiento de
renderizado.
Pero tambin tiene otros efectos, uno de ellos es fijar el valor de transformaciones y
otros objetos en el escenario grfico. A menos que especificamente se le
proporcionen al programa, este no tendr la capacidad de cambiar los valores de
los objetos del escenario grfico una vez que estn vivos.
Hay casos en que un programa necesita la capacidad de cambiar estos valores
despus de que estn vivos. Por ejemplo, cambiar el valor de un objeto
TransformGroup crea animaciones. Para que esto suceda, la transforamcin debe
poder cambiar despus de estar viva. La lista de parmetros a los que se puede
acceder, y de que forma, se llama capacidades del objeto.
Cada SceneGraphObject tiene un conjunto de bits de capacidad. Los valores de
estos bits determinan que capacidades existen para el objeto despus de
compilarlo o de darle vida. El conjunto de capacidades vara con la clase.
SceneGraphObject es la superclase de casi cualquier clase usada para crear un
escenario grfico, incluyendo Group, Leaf, y NodeComponent.
A continuacin se presenta la lista parcial de mtodos de SceneGraphObject.
void clearCapability(int bit)
Clase Alpha
Los objetos de la clase Alpha se usan para crear una funcin que vara en el
tiempo. La clase Alpha produce un valor entre cero y uno, inclusives. El valor que
produce depende de la hora y de los parmetros del objeto Alpha. Los objetos
Alpha se usan comunmente con un comportamiento Interpolator para proporcionar
animaciones de objetos visuales.
Alpha tiene diez parmetos, haciendo la programacin tremendamente flexible. Sin
entrar en detalles de cada parmetro, saber que un ejemplar de Alpha puede
combinarse fcilmente con un comportamiento para proporcionar rotaciones
Regin Progamada
Como se mencion anteriormente, cada comportamiento tiene unos lmites
programados.
Estos
lmites
se
configuran
usando
el
mtodo
setSchedulingBounds de la clase Behavior.
Hay varias formas de especificar una regin programada, la ms sencilla es crear
un objeto BoundingSphere. Otras opciones incluyen BoundingBox y
BoundingPolytope.
La sintaxis del mtodo setShedulingBounds se presenta a continuacin:
void setSchedulingBounds(Bounds region)
Clase BoundingSphere
Especificar un lmite esfrico se consigue especificando un punto central y un rdio
para la esfera. El uso normal de este tipo de lmites es usar el centro a (0, 0, 0).
Entonces el radio se selecciona lo suficientemente grande como para contener el
objeto visual, incluyendo todas las posibles localizaciones del objeto.
Algunos de los constructores de BoundingSphere son:
BoundingSphere() Este constructor crea una lmite esfrico centrado en el origen
(0, 0, 0) con un radio de 1.
BoundingSphere(Point3d center, double radius) Construye e inicializa un
BoundingSphere usando el punto central y el rdio especificados.
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.event.*;
import java.awt.GraphicsConfiguration;
import com.sun.j3d.utils.applet.MainFrame;
rotate.rotX(Math.PI/4.0d);
tempRotate.rotZ(Math.PI/5.0d);
rotate.mul(tempRotate);
objRoot.addChild(objRotate);
objRotate.addChild(objSpin);
RotationInterpolator rotator =
new RotationInterpolator(rotationAlpha,
objSpin, yAxis,
0.0f, (float)
Math.PI*2.0f);
return objRoot;
} // Fin del mtodo CreateSceneGraph
public HelloJava3Dd() {
setLayout(new BorderLayout());
GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
simpleU.getViewingPlatform().setNominalViewingTransform();
simpleU.addBranchGraph(scene);
} // Fin del constructor de HelloJava3Dd