www.delorie.com/djgpp/doc/ug/graphics/intro.html   search  
Guia: Fundamentos de los gráficos

Para hacer un programa que despliega imágenes gráficas, usted debe conmutar el hardware de vídeo a una de los muchas resoluciones gráficas posibles. En estos modos, la imagen en pantalla es creada a partir de una rejilla de pequeños puntos llamados píxeles, cada uno de los cuales puede ser cambiado a un color diferente. Usted puede construir formas complicadas combinando muchos de esos puntos en un patron apropiado, como si tuviera una pieza de papel de dibujo donde cada cuadrado puede ser coloreado de forma diferente. En los módos de vídeo más comunes de las PC un píxel ocupa exactamente un byte en memoria, permitiéndole tomar cualquiera de los diferentes 256 colores posibles, pero las tarjetas gráficas modernas tambien soportan resoluciones con más colores, por ejemplo modos `hicolor´ que usan 16 bits por píxel(65536 colores diferentes), y modos `truecolor´ con 24 bits por píxel(hasta 16777216 colores posibles).

Hay muchas librerías que pueden hacer la programación gráfica en djgpp significativamente más fácil, como Alegro, GRX, y Jlib, pero este documento no tratará de describirlas porque ya están cubiertas en la documentación de sus respectivos paquetes. Este material está proyectado para personas que quieren escribir su propio código gráfico "desde cero", sin usar ninguna librería de terceras partes. No asume ninguna experiencia previa en la programación gráfica de PC, pero si requiere que usted tenga alguna experiencia en el mapeo de memoria DPMI y lo básico de cómo accesar memoria convencional(este material está cubierto en el capítulo anterior (¡que aun no se ha escrito!)).

Una pantalla gráfica consiste de un arreglo de píxeles llamado el "framebuffer". Por convención, un framebuffer es indexado con el origen(cero) en la esquina superior izquierda, con el eje X incrementándose a la deracha, y el eje Y incrementándose mientras se mueve hacia abajo en la pantalla. Esto se ajusta con la disposición de un arreglo C, por lo que usted podría declarar el arreglo de su pantalla como un simple arreglo 2d. por ejemplo en una resolución de 320x200 usted podría tener:

   unsigned char screen_image[200][320];

Note que la dimensión Y viene primero que el valor X: esto parecería ser contraintuitivo, pero es necesario para que la disposición del modelo en memoria sea correcto.

Luego de esta declaración usted puede accesar el pixel de la posición (x,y) usando la sintaxis normal de los arreglos C, por ejemplo para dibujar un pixel en el framebuffer usted escribiría:

   screen_image[y][x] = color;

Esto parece muy simple, pero en muchas situaciones es mejor tratar el framebuffer como un arreglo C uni-dimensional y computar el desplazamiento del píxel usted mismo(esto sería necesario si su programa va a correr en más de una posible resolucción, como el ancho de la pantalla, y por tanto las dimensiones del arreglo no serían conocidas en tiempo de compilación). Para usar éste sistema usted reescribiría la declaración del framebuffer como:

   unsigned char screen_image[320*200];

y dibujar un pixel con el código:

   screen_image[y*320+x] = color;

Hasta el momento estos framebuffers han sido solamente arreglos normales en memoria por lo que, no importa lo que usted dibuje en ellos, los resultados no se verán nunca en pantalla. Pero usted se alegrará de saber que el hardware gráfico usa el mismo formato exacto para almacenar la imágen que despliega en su monitor, por lo que usted puede solamente copiar la imágen de este framebuffer en memoria a el area especial de la memoria que es usada por la tarjeta VGA, y será desplegada para que todos la vean! Escribir directamente a la memoria de vídeo es complicado por el hecho de que está localizado fuera de su espacio normal de direcciones, por lo que se necesitan técnicas especiales para accesarla, y por esta razón hay quien a menudo encuentra más conveniente preparar un cuadro completo en un buffer en memoria(como se describió arriba) y solamente copiarlo a la memoria de video cuando la imagen está completa, aun así los principios continuan siendo los mismos.


traducido por ADnoctum


  webmaster   donations   bookstore     delorie software   privacy  
  Copyright © 1998   by DJ Delorie     Updated Jan 1998  

Please take a moment to fill out this visitor survey

You can help support this site by visiting the advertisers that sponsor it! (only once each, though)