Paso 54: Software: bajo nivel de las funciones
Hay tres razones principales para hacer esto.
Huella de la memoria
La forma más fácil de abordar cada voxel sería a través de una matriz de tres dimensiones buffer. Así:
cubo de char sin signo [x] [y] [z]; (char significa un número de 8 bits, sin signo significa que es rango es de 0 a 255. firmado es -128 a +127)
Dentro de esta matriz cada voxel se estaría representada por un número entero, donde 0 es apagado y 1. De hecho, podría utilizar el entero entero y tiene 256 niveles de brillo distintos. Hemos intentado realmente esto primero, pero resultó que nuestro eBay LEDs tenía muy poco cambio en el brillo en relación con el ciclo de trabajo. El efecto no era lo suficientemente sensible que vale la pena. Fuimos para una solución monocromática. Encendido y apagado.
Con un cubo monocromo y tres buffer dimensional, estaría perdiendo 7/8 de la memoria utilizada. La menor cantidad de memoria que puede asignar es un byte (8 bits), y basta 1 bit para representar el encendido y apagado. 7 bits para cada voxel se desperdiciaría. 512*(7/8) = 448 bytes de memoria desperdiciada. Memoria es escasa en los micro controladores, así que esto es una solución óptima.
En cambio, se crea un búfer que tiene este aspecto:
cubo de unsigned char [z] [y];
En este buffer se representa el eje X dentro de cada uno de los bytes de la matriz de amortiguamiento. Esto puede ser bastante confuso para los que trabajamos, lo que nos lleva a la segunda razón para hacer una biblioteca de funciones de dibujo nivel bajo:
Legibilidad de código
Configuración de un voxel con las coordenadas x = 4, y = 3, z = 5 requerirá el siguiente código:
[5] [3] del cubo | = (0 x 01 << 4);
Puedes ver cómo esto podría conducir a algunos grave cabeza rayar al tratar de depurar su código efecto ;)
En draw.c hemos hecho un montón de funciones que tiene x, y, z como argumentos y no esta magia para usted.
Ajuste el mismo voxel como en el ejemplo anterior se hace con setvoxel(4,3,5), que es _a lot_ más fácil de leer!
Draw.c contiene muchas más funciones como esta. Línea de dibujo, dibujo de plano, dibujo de la caja, relleno etc.. Échale un vistazo a draw.c y familiarizarse con las diferentes funciones.
Código reutilizable y tamaño del código
Como se puede ver en draw.c, algunas de las funciones son bastante grandes. Escribir ese código una y otra vez dentro de las funciones de efecto llevaría un montón de memoria de programa. Solo tenemos 32 KB para trabajar con. Su también aburrido para escribir el mismo código una y otra vez ;)