domingo, 21 de septiembre de 2014

3D en consolas de 8 Bits. ROM para Gameboy

Bueno, pues como sabréis nunca ha existido ningún videojuego con gráficos en 3D para ninguna consola de 8 bits. La razón es que ademas de las grandes limitaciones que suponen los 8 bits, estas consolas nunca tuvieron una GPU que les ayudase a procesarlos.
¿Quiere decir esto que no pueden existir graficos 3D en estas consolas? Pues me puse una tarde a intentar averiguarlo con el kit de desarrollo de GB el cual ya usé en otras ocasiones. Para ello cree un "motor grafico" si se le puede llamar así que procesa polígonos por software (obviamente al no tener ningun chip grafico para 3d) en perspectiva isometrica en wireframe. Como ejemplo de poligonos puse un ejemplo muy simple, no fuese que luego tardase una eternidad en funcionar: dos piramides unidas.
Para conseguír esto, dado que la GB funciona con mapas y sprites, usé una libreria que incluye GBDK llamada <gb/drawing.h> La cual permite trazar lineas, puntos, etc.
Y lo cierto es que tuve muchas complicaciones, ya que el procesador de 8 bits de la GB no permite operaciones en coma flotante ni operaciones trigonometricas (seno,coseno,tangente,...) que me habrian sido de mucha utilidad. (Esto no es tan importante en el 2D). Esto me impidió por ejemplo que pudieran haber rotaciones en el modelo, lo cual ya deja mi "demo" bastante limitada.
Asi que viendo que mi demo iba a ser una p... m... le añadí la posibilidad de poder mover los puntos del modelo, permitiendo poder modificar el modelo en tiempo real.

Lo cierto es que lo conseguí, funciona, aunque dudo que se hubiese podido sacar ningun juego en 3d real, ya que como podreis comprobar si descargais la ROM, la velocidad es muy baja, a pesar de que no hay ningun bucle innecesario, utilizando la CPU de la GB al 100%.
No obstante tampoco me calenté mucho la cabeza porque lo quise hacer en una tarde. Procesa el modelo dos veces cada vez que se mueve, uno para dibujarlo y otro para borrarlo, haciendo que no sea para nada optimo. Ademas tiene muchos glitches, A veces las lineas se mueven incorrectamente por causas que supongo que será por desbordamiento aritmetico (8 bits no dan para mucho). Ademas no puse ninguna restriccion de "fuera de limites" por lo que si os salis de la pantalla la demo fallará (se os colgará o saldran cosas raras por la pantalla).

En fin, nada mas que comentar. para manejarlo, cada vez que pulsais START cambiais de punto, con A y B subis y bajais el punto por el eje Z, y con el pad lo moveis por los ejes XY.
Os adjunto el ROM. Me gustaría adjuntaros tambien el codigo fuente ya que eso os permitiría cambiar el modelo a procesar con gran facilidad (en vez de las dos piramides) e incluso hacerle cambios, pero se que no teneis ni idea asi que me olvido -.-'
Link del ROM