2008-10-06 11 views
6

Estoy programando una aplicación para un 32 bit processor with limited memory (512k flash, 32k RAM).Técnicas para gráficos dinámicos (algorítmicos)

El display en este dispositivo es 128x160 con 16 bit color, que normalmente consumiría 40k ram si tuviera que almacenarlo en mi procesador. No tengo mucha RAM, así que estoy buscando técnicas, consejos, trucos, ideas para generar datos de pantalla sobre la marcha.

cosas que pueden ayudar:

  • Quizás usted conoce de un recurso de este tipo de limitación
  • Tal vez que haya generado gráficos atractivos sobre la marcha
  • ¿Existe un algoritmo genérico puede ser que utilice combinar elementos en la memoria del programa (incluida la mezcla alfa) sobre la marcha mientras escaneo la pantalla
  • Técnicas simples de representación vectorial (o fuente libre (bsd/mit/apache))
  • ???

Tengo un multiplicador, pero no un procesador de coma flotante. La pantalla en sí tiene un controlador y una memoria muy simples para la pantalla, pero las lecturas y escrituras son caras, por lo que no quiero utilizarlas como mi espacio de trabajo si puedo evitarlo.

-Adam

Respuesta

8

En cierto modo, se encuentran en prácticamente los mismos desarrolladores situación de juego, donde en el momento de la Tandys, espectros y principios de los ordenadores. Por lo tanto, aquí está mi recomendación:

Debe leer las escrituras de Michael Abrash en gráficos de computadora. Se escribieron en una época en la que un coprocesador de punto flotante era una pieza de hardware opcional, y describen muchas de las técnicas básicas (líneas de Bresenham, etc.) utilizadas en los días de software antiguo (supuestamente "malo"). .

Puede leer la mayor parte de su "Libro negro" here.

Además, probablemente pueda encontrar una gran cantidad de viejos archivos BBS que la mayoría de las personas usaron en el día para aprender la programación de gráficos here. Solo busca gráficos, líneas y lo que no.

Espero que ayude!

Actualización: También recuerdo haber usado this en mis primeros intentos de dibujar cosas en la pantalla. No puedo decir cuánto tiempo pasé tratando de entender las matemáticas detrás de eso (bueno, para ser justos, tenía 15 años en ese momento). Muy buena (y sencilla) introducción a 3D, y un muy buen primer ministro en transformaciones, rellenos de polígonos e interpolación.

3

¿Qué tipo de datos mostrará en la pantalla?

Si no se trata de imágenes fotográficas, podría considerar usar una paleta. Por ejemplo: una paleta de 256 colores con 8 bits por píxel requeriría 20 kb, (más 256 x 2 bytes para la tabla de búsqueda) que al menos es mejor que 40 kb.

2

Creo que la técnica básica para hacer frente a este tipo de situaciones es dividir la pantalla en bandas horizontales angostas, y solo almacenar dos barras en la RAM. Aparecerá una línea, mientras renderiza la siguiente.Cuando el 'rayo' de escaneo llega a la siguiente raya (y dispara una interrupción para que atrape), intercambia los dos y comienza a dibujar la siguiente raya.

Un desagradable efecto secundario de esto es que tiene difícil límites de tiempo en cuánto tiempo puede pasar en la prestación de cada franja. Así que supongo que sería tentador quedarse con algo aburrido pero con un rendimiento predecible, como los sprites.

poco offtopic pero esto es cómo funciona el hardware de Nintendo DS 3D. Puede verlo si intenta representar demasiados polígonos alrededor de la misma coordenada y (las polis parpadearán aleatoriamente y desaparecerán cuando la actualización de la pantalla supere al hardware de renderizado).

Además, me gustaría segunda sugerencia del otro cartel que utiliza la representación palettised. Es muy difícil hacer cálculos rápidos en píxeles de 16 bits, pero más rápido en 8 bits si eres inteligente sobre la forma de diseñar tu paleta.

0

Algunas ideas que combinen buenos gráficos y la memoria baja:

  • de la tienda y sprites en flash.
  • Almacena los gráficos generados dinámicamente en la RAM usando una paleta a la mitad de los bytes.
  • Utilice la función de ventana del controlador LCD para actualizar solo la parte de la pantalla que necesita.
Cuestiones relacionadas