Volver menú revistas Volver página anterior

El Amiga Me Encanta ha conseguido el permiso por escrito de IDG Comunications España para ofrecer los artículos de la revista Amiga World España.


N° 8 - Marzo 1990
ANIMACION VECTORIAL    1.ª PARTE

En sin duda la
animación un campo
donde siempre ha
querido tomar parte
el usuario, ya sea por
lo espectacular de
éstas, lo realistas
que pueden llegar a
ser, o simplemente
por conseguir algunos
efectos de
movimiento para su
logotipo, etc...

NOTA: Las fotos pueden ser ampliadas para ver detalles. Situando el ratón encima de la foto durante unos instantes, podrás ver una pequeña descripción y lo que ocupa la ampliación.

Por F. Javier Rodríguez

Si bien los usuarios desean conocer las diferentes formas complejas de los algoritmos con los que trabajan los programas de animación, también es evidente que en la mayoría de los casos se recurre a algún paquete profesional para crear la animación. Las ventajas de recurrir a los programas ya creados son muchas, pero posee dos grandes desventajas: la primera es que el usuario no podrá conocer el cómo lo hace el ordenador para conseguir los resultados, la segunda desventaja es que un programa por muy bueno que este sea no llegará a reflejar al 100% los deseos del usuario.

Con esta serie de dos artículos no se pretende consagrarles en el campo de la animación, sino más bien introducirles de una forma sencilla y amena en este tema, teniendo como principal objetivo el conocer un pcoo más la forma de trabajar de nuestro ordenador.

Los programas de ejemplo que se incluyen en el artículo están desarrollados en Basic, con lo cual la velocidad de animación no se asemejará ni mucho menos a las que usted puede observar en otros programas.


Formas de animación

Antes de entrar en el campo de la animación vectorial decirles que, en un principio, lo que hizo a los vectores interesantes fue la necesidad de tratar gráficos con cambio de forma de la forma más rápida posible y con el menor consumo de memoria en el almacenaje de los datos que dichas figuras representarían.

Los campos de aplicación para los gráficos vectoriales son en sí muy elevados, ya que se puede construir desde un espacio exterior perfectamente simulado, hasta la representación lo más humana posible de una cabeza (Max Headroom); haciendo que los comportamientos de las figuras se asemejen lo más posible a las reacciones naturales.

El primer tipo de
animación es aquella en la
que partiendo de un dibujo
inicial, sin importar el
número de colores ni el
número de formas, se van
almacenando en la "lista"
de animación todos los
siguientes movimientos
relativos al dibujo inicial.

La animación en sí posee varios "campos", dichos campos se diferencian dependiendo de la forma usada para crear una animación. De entre los diferentes tipos de animación "picture", animación de bloque y animación vectorial.


Animación picture

El primer tipo de animación (animación picture) es aquella en la que partiendo de un dibujo inicial, sin importar el número de colores ni el número de formas, se van almacenando en la "lista" de animación todos los siguientes movimientos relativos al dibujo inicial (ver dibujo 1).


Letra descompuesta

El segundo tipo de animación (animación de bloque), es aquel en el que dicho efecto se consigue, sin importar el número de colores ni de formas, por la alteración constante de varias secuencias en la pantalla; evidentemente este tipo de animación supone un gasto tremendo de memoria.


Asimetría

Por último el tercer tipo de animación (animación vectorial), es aquel en el que se consigue dicho efecto a través de una lista de movimientos (partiendo de una posición inicial), cuya cantidad de colores son variables, pero en la que la estructura del dibujo o formas se limita a la construcción de las mismas mediante segmentos lineales.

Es precisamente este tipo de animación en el que se basará el artículo, tratándose este de animación vectorial en su forma más sencilla (con un solo plano de color).


Introducción a la animación vectorial

La animación vectorial, como se dijo anteriormente, está compuesta por el movimiento de una o más formas en pantalla con la diferencia primordial de que dicha animación está compuesta por diferentes segmentos.

Seguramente habrán visto más de una vez, videojuegos en los que los diferentes paisajes se movían perfectamente simulando la tridimensionalidad, pero también habrán observado cómo dichos paisajes resultaban un poco planos y a veces faltos de volumen.

Para empezar a adentrarse en el mundo de la animación vectorial sirva el siguiente ejemplo, con el movimiento por pantalla de un solo vector o segmento. (Listado 1).

En realidad el conseguir dicho movimiento no es nada complicado, ya que los datos (o puntos de referencia) a tener en cuenta son muy pocos: cuatro iniciales y dos de variación por cada secuencia de la animación. La cantidad de los datos de variación dependerá en cada caso del algoritmo utilizado para la animación, en este caso es un algoritmo muy común y nada complicado.

En dicho algoritmo, los cuatro puntos iniciales se corresponden con las coordenadas X e Y de los dos extremos del segmento. Los diferentes puntos de movimiento se consiguen mediante el incremento, por mediación de una variable, de los puntos base (o puntos de coordenada iniciales). Para no tener que utilizar cuatro puntos en cada una de las secuencias, lo que se hace es recalcular dichos puntos a medida que se produce la animación, con lo cual se redibujará el segmento a cada paso del programa.

Los valores de movimiento relativos a los puntos originales son en definitiva no números, sino fórmulas que generan determinados valores, los cuales traducidos darán como resultado los valores de movimiento.

Como consecuencia de este algoritmo si se desea animar formas más complejas (aquellas que están construidas con más de un segmento), se necesitarán cuatro puntos iniciales por cada uno de los segmentos que construyen la figura en cuestión; con esto se consigue que cada uno de los segmentos de la figra, puedan animarse independientemente al resto de la figura (ver dibujo 2).

Es en el listado número dos donde se puede apreciar este efecto. En dicho programa partiendo de una figa inicial se realizan los pasos necesarios para redimensionar la misma; esto se consigue en el tratamiento de la figura no como un único gráfico sino como la composición de un gráfico por más de un elemento (en este caso segmentos).


Efectos en la animación

Hasta el momento se ha tratado en este artículo a la animación vectorial sin alterar el tamaño de los segmentos, pero esto no quiere decir que ello sea imposible.

Con la alteración del tamaño de los segmentos en una animación se pueden conseguir efectos bastante interesantes, tales como por ejemplo el efecto de profundidad, tridimensionalidad de la figura o la de acercamiento y alejamiento de la misma.

Por ejemplo para conseguir el efecto de profundidad, solamente será necesario romper la simetría de la figura en cuestión (ver dibujo 3). Dicha asimetría debe estar directamente relacionada con la desproporción de tamaño entre las dos mitades de la figura. Pero son este y otros efectos los que podrá observar en la segunda parte de este artículo, la cual se publirará el próximo número.

Por otro lado la posibilidad de tratar al objeto como una figra de dimensiones relativas, permite mucho tipo de comodidades y ahorro. Poniendo como ejemplo la construcción de un set de caracteres vectorial, parecería que el consumo de memoria sería en cierta ofrma desmedido en comporación a la utilizada por el set existente en formato bit-map; pero en cierta manera dicho consumo de memoria se vería rápidamente saldado a la hora de usar caracteres de mayor dimensión o en diferentes formas de perspectiva. Esto es debido a que mientras en el formato Bit-Map sería necesario recurrir a otro set de caracteres diferentes, con las letras vectoriales la cantidad de datos relativos a la figura serían los mismos independientemente del tamaño, perspectiva etc...

Con la alteración del ta-
maño de los segmentos en
una animación se pueden
conseguir efectos bastan-
te interesantes, tales co-
mo por ejemplo el efecto
de profundidad, tridimen-
sionalidad de la figua o la
de acercamiento y aleja-
miento de la misma.

Asimismo es con los vectores con los que se consigue un mayor campo de posibilidades en cuanto a representaciones gráficas de todo tipo, pues con un poco de imaginación y paciencia es posible transformas una 'A' en un misil o en una flor, aprovechando la misma estructura de datos.

Como adelanto al artículo del próximo mes, decirles que en éste se tratará a la animación vectorial en forma de figuras tridimencionales con volumen, incluyendo un programa bastante interesante.

Como se mencionó anteriormente todos los programas incluidos en el artículo están escritos en AmigaBasic, con lo cual si se desea adquirir mayor velocidad de programa es muy aconsejable que estos programas sean compilados con cualquiera de los programas existentes en el mercado.


Comentarios de los programas

Segmento Animado

Este es un programa muy sencillo en el que se usa el comando Line para definir el segmento, posteriormente a éste se le va variando las coordenadas por mediación de una variable, con lo cual se crean varias secuencias y por tanto un movimiento de dicho elemento.

Letra vectorial

Este sencillo programa les mostrará cómo con una sencilla rutina pueden hacer sus propios vectores animados, ya que para la construcción de la animación que aquí se emplea como ejemplo, sólo se han utilizado ocho variables.

Como podrán comprobar dicha animación carece de tridimensionalidad, así como de volumen en el objeto en cuestión; pero este es algo que dejaremos para el siguiente capítulo.

El sistema empleado para la creación de la figura que se va a animar, en este caso una "A", es el siguiente.

Se a definido un punto inicial de segmento así como otro final del mismo; la representación de los restantes segmentos que construyen la figura, se consigue mediante puntos relativos a estos primeros. Esto hace que al cambiar alguna de las variables que definen los puntos del segmento principal (aquel al que se "unen" los demás), como los demás son relativos a dicho punto por tanto también cambiarán su posición.

La forma de ver mejor este concepto es mediante el uso único de una variable para producir el incemento y decremento en el tamaño de la figura.

Es cierto que de esta forma los casos son muy generales, debiendo cambiar todo el programa para la construcción de otra letra, pero también es la forma con la que ustedes podrán ver más fácilmente las operaciones que se producen.

La variable DIR se usa exclusivamente como valor en el que se debe ir produciendo el aumento o decremento de la figra, adquiriendo ésta mayor velocidad a medida que el valor "DIR" sea mayor. Para ver los diferentes comportamientos pruebe a modificar su valor con los siguientes datos: 0.1, 1, 1.5, 2, 5, 10.

Como habrán podido comprobar con el valor 0.1 el cambio en el tamaño de la figa se eterniza, mientras que si pruebas con el valor 10, la velocidad es bastante mayor, con lo que el movimiento parece más real.

Por el momento, hasta el mes que viene, podrá ir experimentando con este programa y de esta manera descubrir nuevas posibilidades.

' LETRA VECTORIAL                                  . 110
' . 273
' (C) 1990 AMIGA WORLD . 195
' . 273
' (C) 1990 F. JAVIER RODRÍGUEZ . 336
' . 273
WINDOW CLOSE 1 . 224
SCREEN 1,320,200,5,1 . 667
WINDOW 1,"LETRA - VECTOR",(0,0)-(297,180),0,1 . 488
WINDOW OUTPUT 1 . 914
PALETTE 1,0,0,0 . 314
PALETTE 2,1,.1,.75 . 223
COLOR 2,1 . 846
PAINT (1,1),2,1 . 441
' DEFINICIÓN DE COORDENADAS PARA LOS . 16
' SEGMENTOS . 389
X=80 . 526
Y=150 . 687
X1=100 . 964
Y1=150 . 976
' AUMENTO DEL VECTOR . 662
C=-200 . 637
C1=200 . 206
DIR=5 . 985
FIGURA: . 219
FOR I=C TO C1 STEP DIR . 939
LUNE (Y-I,X-I)-(Y1-I,X1+I+1),1 . 548
LINE (Y-I,X-I)-(Y+10+I,X-I),1 . 696
LUNE (Y+10+I,X-I)-(Y+10+I,X1+I+1),1 . 133
LINE (Y-I,X+10)-(Y+10+I,X+10),1 . 344
GOSUB BORRA . 358
NEXT . 61
SWAP C,C1 . 157
DIR=-DIR . 468
GOTO FIGURA . 146
BORRA: . 516
LINE (Y-I,X-I-1)-(Y1-I,X1+I+1),2 . 712
LINE (Y-I,X-I)-(Y+10+I,X-I),2 . 703
LINE (Y+10+I,X-1)-(Y+10+I,X1+I+1),2 . 140
LINE (Y-1,X+10)-(Y+10+I,X+10),2 . 351
RETURB . 357

Numero de líneas: 41

 
' (C) 1990 AMIGA WORLD                             . 195
'                                                  . 273
' (C) 1990 F. JAVIER RODRÍGUEZ                     . 336
'                                                  . 273
WINDOW 1,"VECTOR",(0,0)-(500,80),0,-1              . 199
LI:                                                . 81
B=-1                                               . 119
FOR T=0 TO 80                                      . 868
LINE (200,T)-(300,T)                               . 946
GOSUB BORRA                                        . 358
NEXT                                               . 61
B=1                                                . 995
FOR T=80 TO 0 SETP -1                              . 160
LINE (200,T)-(300,T)                               . 946
GOSUB BORRA                                        . 61
GOTO LI                                            . 953
BORRA:                                             . 516
LINE (200,T+B)-(300,T+B),0                         . 725
RETURN                                             . 357
Numero de lineas:   20

Volver menú revistas Volver página anterior