Retrazado Vertical

 
Hardware
Modo 13h
Retrazado Vertical
Primitivas
La Paleta
Pantallas Virtuales
Sprites
Tablas Prefedifinidas
Efectos
Texto
Formatos gráficos
Periféricos
Optimizaciones
Herramientas
Cursos
Links
Foro
Correo Electrónico
A la hora de programar gráficos es muy importante conocer el concepto de retrazado vertical. Para comprender esto hay que conocer como funciona el tubo de rayos catódicos de nuestro monitor. Existe un cañón de electrones en la parte posterior del monitor que mantiene los pixeles "refrescados" con sus correctos valores cada 1/60 segundos (60 Hz) o 1/70 segundos (70 Hz)  dependiendo de la frecuencia del monitor. Este cañón dispara un haz de electrones a cada píxel, fila a fila. El retrazado vertical es el tiempo que tarda el haz de electrones en retornar desde la esquina inferior derecha, en su orientación hacia la esquina superior izquierda, donde comienza de nuevo el barrido de la pantalla. Durante ese tiempo no se emiten electrones.  Este es un período extremadamente corto en el que apenas parece que dé tiempo a nada, pero no es así. Durante este tiempo se puede cambiar cualquier parte de la memoria de vídeo sin que la circuitería de vídeo se “entere”, por lo tanto no se actualizarán los cambios en pantalla. De esta forma, los gráficos actualizados no se verán afectados por esos efectos que todos hemos visto alguna vez y que suelen ser los siguientes: 

Cuando la pantalla completa o una imagen  muy grande se desplaza desde la izquierda hasta la derecha, suele aparecer como cortada, es decir, una parte superior está más desplazada hacia una dirección que la parte inferior. Esto ocurre porque el barrido vertical pilla a la actualización de la memoria de vídeo antes de que termine, por lo que aparecerá la parte actualizada superior y la todavía no actualizada inferior, y así vamos propagando los retrasos.

Otro efecto es el de la nieve o "fuzz". Se produce cuando hay algún efecto de paleta, como por ejemplo un fundido en negro donde se va oscureciendo paulatinamente la imagen. Entonces aparecen unas líneas a veces, otras veces son numerosos puntos blancos, e incluso otras, la imagen se distorsiona. Esto ocurre porque para realizar los efectos de paleta, el decremento hasta el color negro en este ejemplo, se hace de forma continua y el barrido vertical "pilla" continuamente a la actualización de los valores del DAC (Convertidor analógico digital ) de vídeo de donde toma la intensidad que le tiene que asignar al electrón que tiene que lanzar en ese momento.

El último efecto y muy importante sobre todo para los juegos, es que cuando no se utiliza esta técnica y hemos creado por ejemplo, una animación donde se desplazan a la vez decenas de pequeñas imágenes, dependiendo del computador en que se esté ejecutando irá más rápido o más lento, algo no deseable en estos casos. Imaginemos que estamos jugando al Tetris y no implementa esta técnica. Si el que lo programó lo hizo en un 386, lo verá “bien" en su ordenador, y todos los que tengan este modelo, también. Pero supongamos que lo ejecutamos sobre un 8086. Irá terriblemente lento y casi injugable, puesto que como el programador lo veía bien en su computador, no se esforzó mucho en optimizar las rutinas. Sin embargo, si ese mismo programa se ejecuta en un Pentium Pro a 200Mhz, el jugador se desesperará igualmente, pero no porque sea lentísimo, sino porque apenas le dará tiempo a ver las piezas y terminará la partida casi antes de empezar. Por el contrario, si se piensa en la técnica del barrido vertical, se podrá aprovechar un detalle: no importa la velocidad del computador, casi todos los monitores tienen la misma frecuencia de barrido, con lo que si se usa el procedimiento anterior, se verá ese programa a la misma velocidad en cualquier computador, puesto que lo único que hace el procedimiento es esperar y retener al procesador mientras el barrido esté activo, y liberarlo cuando el haz de electrones retorne a su posición inicial. De esta forma se controla la velocidad de una forma cómoda. Y añadiéndole que soluciona los anteriores problemas de la nieve y las imágenes cortadas, parece que puede ser bastante interesante su uso.

Para conseguir hacer un procedimiento que se encargue de esperar el retrazado o barrido tendremos que hacer uso de los puertos de la VGA. Para esto se usará el puerto INPUT STATUS REGISTER 1, que es el 03DAh que ofrece la señal de retrazado vertical en su bit 3, de forma que podremos detectar en cualquier momento si hay un retrazado efectuándose, pero nosotros no sabemos si el haz de electrones esta abajo del todo, o esta en medio de la pantalla, por eso deberemos de esperar a que el haz vuelva a estar arriba en la pantalla. Es muy aconsejable hacer este procedimiento en ensamblador ya que un barrido es cuestión de milisegundos y la rutina debe ser muy rápida.
Aquí tenemos una representación del byte que nos entrega la información necesaria para saber si hay retrazado:
 


Retrazado Vertical


Pero como las optimizaciones se encuentran en otra sección, veremos como hacer este procedimiento en lenguaje c puro. Veamos:
 

void WaitRetrace(void)
{
     while(!((inportb(0x3DA) & 8)==8));      // Retrazado activo
     while(!((inportb(0x3DA) & 8)==0));      // Retrazado no activo
}

Pero que hace exactamente este código. En el primer ciclo leemos un byte del puerto 3Dah y comprobamos su bit numero 4, si esta a cero esperamos, esto significa que el retrazado esta activo. Luego en el segundo ciclo, nuevamente leemos el byte del mismo puerto y verificamos nuevamente y esperamos hasta que el retrazado no este activo.

Por el momento no veremos ejemplos, per en otras secciones podrás ver aplicaciones usando esta técnica, especialmente en lo referente a efectos, uso de sprites, pantallas virtuales, etc.


Anterior
Página principal
Siguiente
1
Hosted by www.Geocities.ws

1