[Homebrew] [VDP2] - Cargando Un Fondo


Objetivo: [Homebrew] [VDP2] - Cargando Un Fondo
Les traigo un tutorial para poder pintar una imagen de fondo estática con el VDP2 en el NBG1(Normal BackGround 1).


YouTube Link


Para comenzar:

  • Nivel de dificultad: Media.

  • Lenguaje: ANSI C/C++.

  • Herramientas: SaturnOrbit, Gimp.


Vamos a volver a utilizar el ejemplo S_2_2. Personalmente voy a tomar, el mismo que subi de otro tutorial.
Para poner todo a punto antes de comenzar debes pasar por aca.

Luego debemos agregar a la lista de librerías la DEFHUFF (algorítmos de compresión de Huffman) sino no nos va a compilar, porque no reconoce las funciones.
Se debe incluir el .O (parecido .dll de Windows) ya que la librería es propietaria de su autor y ya está compilada.

vdp2_1

El VDP2 es el segundo procesador para mostrar scrolls en movimiento ó rotacion. Además es el encargado de pasar la imagen de hacia la salida de video.

Tenemos varios tipos de Backgrounds:

  • Estáticos y Scroll : NBG0,NBG1,NBG2,NBG3.
  • De Rotación: RBG0,RBG1.





En este tutorial vamos a levantar una imagen compresa que esta en el CD y pintarla en el NBG1.
Primero creamos una carpeta dentro de nuestro proyecto con el nombre de backgrounds.

Vamos a preparar la imgen, no todo esta permitido! la imagen debe ser de 15bits con o sin compresión. Se le pueden poner transparencias (en investigación).
Ademas no se pueden pasar de ciertas caracteristicas en la resolución.

Tengo una imagen en RGB con una resolución 320x240 pixeles, abró algun editor gráfico. En mi caso GIMP, la guardo como TGA y ademas tildo la opcion de compresión RLE (Run-Length Encoding). Obtengo Fondo1.TGA, la copiamos dentro de la carpeta backgrounds :P

Ahora tengo que transformarla a formato Saturn con el BGCON que se encuentra en C:SaturnOrbitToolsBGCON .
Necesitamos hacer llamar a esta utilidad, pasandole un .txt con ciertas configuraciones.

Para hacer las cosas más faciles vamos a hacer un batchfile (.bat) para que llame a esta utilidad y nos olvidemos de tantas rutas.

COPY C:SaturnOrbitSET_COF.BAT .TMP.BAT
CALL TMP.BAT
DEL TMP.BAT
BGCON.EXE TGA2DHUF.TXT
MOVE FONDO1.BIN "C:/S_2_2/cd/FONDO1.BIN"
pause


Guardamos esto, con el nombre BACKCONV.BAT dentro de la carpeta backgrounds.

Luego el archivo de configuraciones.
CD 15
IF TGA
IM BITMAP
CMP DHUFF
RGBHI ON
TRANS -1
OF BIN
L fondo1.tga
S fondo1.bin


Lo guardamos como TGA2DHUF.TXT en la carpeta backgrounds y ejecutamos el .bat. Por ultimo comprobamos que este la imagen fondo1.bin en la carpeta cd del proyecto.




Vamos con el proceso del código.

Como lógica lo primero que debemos es activar el CD :wink: .

#include <SEGA_GFS.H>
#define OPEN_MAX (Sint32)5
#define DIR_MAX (Sint32)25

// keep this info global
GfsDirTbl gfsDirTbl;
GfsDirName gfsDirName[DIR_MAX];
Uint32 gfsLibWork[GFS_WORK_SIZE(OPEN_MAX)/sizeof(Uint32)];
// number of files in current directory
Sint32 gfsDirN;

void init_CD()
{
GFS_DIRTBL_TYPE(&gfsDirTbl) = GFS_DIR_NAME;
GFS_DIRTBL_DIRNAME(&gfsDirTbl) = gfsDirName;
GFS_DIRTBL_NDIR(&gfsDirTbl) = DIR_MAX;
gfsDirN = GFS_Init(OPEN_MAX, gfsLibWork, &gfsDirTbl);
}


Luego debemos activar el VDP2 con las configuraciones necesarias.

Desactiva y activa la salida de video.
slTVOff(); slTVOn();

Asignamos un la prioridad en la que se verán los fondos. Siendo 7 el del frente.
slPriorityNbg0(7);
slPriorityNbg1(6);


slBitMapNbg1(COL_TYPE_32768, BM_512x256, (void *)VDP2_VRAM_A0);
Esta funcion es la mas importante, le pasamos los parametros de los colores posibles y el tamaño que va a crear en memoria. Pero como nuestra imagen es 320x240, la va a estirar. Si algo haces mal, la imagen se va a mostrar distorcionada.

Activamos ambos backgrounds.
slScrAutoDisp(NBG0ON|NBG1ON);
El NBG0 sirve para todas las funciones de slPrint


void init_VDP2()
{ //Desactivamos la salida de video.
slTVOff();
//Pintamos el fondo negro por si las dudas. ;)
slBack1ColSet((void *)BACK_CRAM, CD_Black);
//Asignamos un la prioridad en la que se verán los fondos. Siendo 7 el del frente.
slPriorityNbg0(7);
slPriorityNbg1(6);
// paleta: COL_TYPE_16, COL_TYPE_256, COL_TYPE_2048
// rgb: COL_TYPE_32768, COL_TYPE_1M
// bitmap sizes(BM_HxV): BM_512x256, BM_512x512, BM_1024x256, BM_1024x512
slBitMapNbg1(COL_TYPE_32768, BM_512x256, (void *)VDP2_VRAM_A0);
//Posicionamos el fondo.
slScrPosNbg1(toFIXED(0.0), toFIXED(0.0));
//Activamos ambos backgrounds
slScrAutoDisp(NBG0ON|NBG1ON);
//Activamos la salida de video.
slTVOn();
}


Y por ultimo cargamos la imagen a la memoria con la función.
loadBG()

Les dejo el código para que lo vean.

Perfil MP  
Objetivo: Re: [VDP2] - Cargando Un Fondo
Todos estos pequeños articulos son muy interesantes. Hemos hecho traducciones y sacado unreleaseds, pero nunca pense que llegaria a ver articulos de homebrew.

Muchas gracias :wink:

Perfil MP  
Objetivo: Re: [VDP2] - Cargando Un Fondo
Simplemente IMPRESIONANTE , os felicito y os doy animos para seguir , aunque no entienda nada de programación siempre me leo los mensajes que son curiosos, quién sabe, alomejor algún día sacais el juego de Segasaturno 8) seriamos la envidia de todo el mundo. :lol:

Perfil MP  
Objetivo: Re: [VDP2] - Cargando Un Fondo
Gracias. pero todo a su tiempo, ya veran la luz de varios proyectos.
Pero como simpre me falta tiempo :|

Perfil MP  
Objetivo: Re: [VDP2] - Cargando Un Fondo
Buenas Facundo , gracias por el tuto genial como siempre , ¿El proximo cual sera :P? ¿Sonido?¿Pistas de audiocd?¿La lista de comandos que comentaste en el hilo anterior? Nos tienes en ascuas esperando la proxima "hoja de la biblia Saturnera" :P

Perfil MP  
Objetivo: Re: [VDP2] - Cargando Un Fondo
Si, seguramente va a ser el Sonido.
Porque para 3D, necesito explicar otros temas, que van más allá de la programación; ó por ahi lo separo en distintas secciones. :roll:

En este ejemplo uso, dos tablas de sprites como me preguntaste en el otro hilo. hechale un ojo. :wink:

Perfil MP  
Objetivo: Re: [VDP2] - Cargando Un Fondo
Juer que facil parecen las cosas cuando las ves XD Comprobado el tema del flip y los escenarios parecen que van a dar tralla, aunque con el tuto parece que se simplifique la cosa , bueno las preguntas XD

-El BG0 ¿Es solo para texto?¿Si no usamos texto no es necesario cargarlo?en teoria se podria ahorrar recursos si no se ejecuta
-¿Limitaciones de resolucion?

Ahora ando un poco liado pero para mediados de septiembre volvere con las pilas puestas y proyectillos :P

Perfil MP  
Objetivo: Re: [VDP2] - Cargando Un Fondo
El NBG0, es para ambas cosas, podes usar texto ó imagenes; para activarlo tenes que declarar las mismas funciones pero donde dice por ejemplo slBitMapNbg1 (esta haciendo referenca al NGB1) deberías cambiarla por slBitMapNbg0 y asi con todas las funciones.

Las resoluciones son para ambos 512x256, 512x512, 1024x256, 1024x512. Siempre la consola hace un strech de la imagen :wink: .

A tu pregunta de ahorrar recursos, es si. Pero tambien podes usar ambos NBG con imagenes distintas y cambiarlas cuando quieras; esto lo hace Residen Evil, si lo debugeas con Yabause ó SSF sale esa información. :lol:

PD: dentro de poco voy a liberar unas betas de los proyectos que tengo para que prueben.

Perfil MP  

Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
No puede descargar archivos
Puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.0255s (PHP: 61% SQL: 39%)
Consultas SQL: 9 - Debug off - GZIP Desactivado