Pregunta

Estoy programando una aplicación para un procesador de 32 bits con memoria limitada (512k flash, 32k RAM).

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

Cosas que podrían ayudar:

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

Tengo un multiplicador, pero ningún procesador de punto 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 usar eso como mi espacio de trabajo si puedo evitarlo.

-Adam

¿Fue útil?

Solución

De alguna manera, estás en una situación similar a la de los desarrolladores de juegos en el momento en el que los Tandys, los Spectrums y las primeras PC. Así que, aquí está mi recomendación:

Deberías leer los escritos de Michael Abrash en gráficos de computadora. Fueron escritos en una época en la que un coprocesador de punto flotante era una pieza de hardware opcional, y describían muchas de las técnicas básicas (líneas de Bresenham, etc.) utilizadas en los viejos (supuestamente "malos") días procesados. .

Puedes leer la mayor parte de su " Libro Negro " aquí .

Además, es probable que encuentre muchos de los antiguos archivos BBS que la mayoría de las personas usaban en el pasado para aprender a programar gráficos here . Solo busca Gráficos, Líneas, y qué 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 esto (bueno, para ser justos, tenía 15 años en ese momento). Muy buena (y simple) introducción a 3D, y una muy buena premier sobre transformaciones, rellenos de polígonos e interpolación.

Otros consejos

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

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

Creo que la técnica básica para lidiar con este tipo de situación es dividir la pantalla en franjas horizontales estrechas, y solo amortiguar dos franjas de este tipo en la RAM. Se mostrará una franja, mientras que renderiza la siguiente hacia abajo. Cuando el 'haz' de exploración golpea la siguiente franja (y dispara una interrupción para que la atrapes), intercambias las dos y comienzas a dibujar la siguiente franja hacia abajo.

Un efecto secundario desagradable de esto es que tienes hard límites de tiempo en cuanto a cuánto tiempo puedes dedicar a renderizar cada franja. Así que supongo que sería tentador seguir con algo aburrido pero con un rendimiento predecible, como sprites.

Ligeramente fuera de lugar, pero así es como funciona el hardware 3D de Nintendo DS. Puede verlo si intenta representar demasiados polígonos alrededor de la misma coordenada y: los polis parpadearán y desaparecerán aleatoriamente a medida que la actualización de la pantalla supere al hardware de renderizado.

También, secundaría la sugerencia del otro póster de que usas el renderizado paletizado. 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 en cuanto a la forma en que distribuyes tu paleta.

Algunas ideas que combinarían buenos gráficos y poca memoria:

  • Almacena fondos y sprites en flash.
  • Almacene los gráficos generados dinámicamente en la RAM usando una paleta a la mitad de los bytes.
  • Use la función de ventanas del controlador LCD para actualizar solo la parte de la pantalla que necesita.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top