Anuncios Google

OSLib - Modulo Draw

Tutoriales Avanzados Homebrewes

Ahora que hemos aprendido lo básico de las OSLib y realizado un resumen completo de las funciones básicas es hora de explicar los distintos módulos que podemos usar en las OSLib, en esta entrega hablaremos del Módulo Draw, un módulo muy util para dibujar y/o modificar imágenes. Al final del tutorial tenéis en la sección "Descargas" el material necesario, como siempre. Comencemos.

Autor: Dioni0396.

Procedimiento:

Tenemos dos degradados, el degradado con capa alfa y el otro sin capa alfa, serán utiles para ir viendo la transparencia de imagenes.

Cargando imagenes con alfa:

Supongo, que alguna vez, necesitareis imagenes con transparencia alfa, bien pues siempre que las vayais a usar poneis este codigo antes de mostrarlas.

oslSetAlpha(OSL_FX_DEFAULT, 0);

La verdad es que no hay argumentos que explicar, esta funcion recibe una serie de funciones que ire poniendo. Un ejemplo basico a usar, con las imagenes que os he dado:

#include <oslib/oslib.h>
PSP_MODULE_INFO("Draw Module",0,1,1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);
PSP_HEAP_SIZE_KB(18*1024);
OSL_IMAGE *Fondo1, *Fondo2;
 
int main(){
	oslInit(0);
	oslInitGfx(OSL_PF_8888,1);
	Fondo1 = oslLoadImageFilePNG("Test1.png",OSL_IN_RAM,OSL_PF_8888);
	Fondo2 = oslLoadImageFilePNG("Test2.png",OSL_IN_RAM,OSL_PF_8888);
	while(!osl_quit){
		oslStartDrawing();
		oslReadKeys();
		oslSetAlpha(OSL_FX_DEFAULT, 0);
		oslDrawImage(Fondo2);
		oslDrawImage(Fondo1);
		oslEndDrawing();
		oslSyncFrame();
	}
	oslEndGfx();
	oslQuit();
	return 0;
}

Digamos que ahora nos interesaria jugar con la transparencia de una imagen, ¿a que nos gustaria que cuando queramos la imagen sea semi-transparente? Bien pues con este comando podemos:

oslSetAlpha(OSL_FX_ALPHA, alf); //El primer argumento simplemente hace que puedas manejar las transparencias.
//El segundo, llamado alf, es para manejar la transparencia, podemos si queremos con un int o u16 ir aumentandolo o disminuyendo
//Para conseguir un efecto agradable, en alf solo podremos desde 0 (Transparente) hasta 255 (Opaco)

Ejemplo:

PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);
PSP_HEAP_SIZE_KB(18*1024);
OSL_IMAGE *Fondo1, *Fondo2;
u16 Alfa=0;
int main(){
	oslInit(0);
	oslInitGfx(OSL_PF_8888,1);
	Fondo1 = oslLoadImageFilePNG("Test1.png",OSL_IN_RAM,OSL_PF_8888);
	Fondo2 = oslLoadImageFilePNG("Test2.png",OSL_IN_RAM,OSL_PF_8888);
	while(!osl_quit){
		oslStartDrawing();
		oslReadKeys();
		oslSetAlpha(OSL_FX_DEFAULT, 0);
		oslDrawImage(Fondo2);
		oslSetAlpha(OSL_FX_ALPHA, Alfa); //Si os pasais de 255 la imagen desaparece.
		if(osl_keys->held.up) Alfa++;
		if(osl_keys->held.down) Alfa--;
		oslDrawImage(Fondo1);
		oslEndDrawing();
		oslSyncFrame();
	}
	oslEndGfx();
	oslQuit();
	return 0;
}

Como veis uso dos oslSetAlpha, ya que sino lo usara los dos haria el efecto de transparencia aumentando o disminuyendo, esa funcion afecta a todas las imagenes que hay despues, excepto si usas otro oslSetAlpha, y asi sucesivamente.

Limpiando de color la pantalla, esta funcion rellenaria la pantalla del color deseado:

oslClearScreen(color); //En color pondriamos el color a usar, como no teneis conocimiento alguno de colores os lo expongo.
//Los colores van en RGB, pero hay de varios tipos, pero el mas basico seria RGB(CantidadColorRojo,CantidadColorVerde,CantidadColorAzul)
//En esas cantidades indicariamos cuanto color queremos poner, si pusieramos RGB(255,0,0) devolveria color rojo al ponerlo. Es similar a lua. Solo se podria poner de 0 a 255 en cada argumento.
//Podeis usar gimp para averiguar en RGB que color quereis usar. aparte de poder verlo aqui: http://psp.scenebeta.com/node/71807 (Gracias xerpi)

Ejemplo:

PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);
PSP_HEAP_SIZE_KB(18*1024);
OSL_IMAGE *Fondo1, *Fondo2;
u16 Alfa=0;
int main(){
	oslInit(0);
	oslInitGfx(OSL_PF_8888,1);
	Fondo1 = oslLoadImageFilePNG("Test1.png",OSL_IN_RAM,OSL_PF_8888);
	Fondo2 = oslLoadImageFilePNG("Test2.png",OSL_IN_RAM,OSL_PF_8888);
	while(!osl_quit){
		oslStartDrawing();
                oslClearScreen(RGB(0,0,255)); //Color Azul
		oslReadKeys();
		oslSetAlpha(OSL_FX_DEFAULT, 0);
		oslDrawImage(Fondo2);
		oslSetAlpha(OSL_FX_ALPHA, Alfa); //Si os pasais de 255 la imagen desaparece.
		if(osl_keys->held.up) Alfa++;
		if(osl_keys->held.down) Alfa--;
		oslDrawImage(Fondo1);
		oslEndDrawing();
		oslSyncFrame();
	}
	oslEndGfx();
	oslQuit();
	return 0;
}

Transparencia de un color:

Como ya vimos en un anterior tutorial, mediante un comando el color de fondo del sprite desaparecia, pues lo reexpongo para que lo veais:

oslSetTransparentColor(RGB(255, 0, 255)); //Quitara el rosa
//cargamos una imagen que queramos quitar ese color
oslDisableTransparentColor(); //Esto quitara el color de esta imagen, sino esta este comando es posible que no se quite.

Dibujos:

Ahora aprenderemos las formas mas basicas de dibujo, rectangulos, lineas, y rellenarlos de un color.

oslDrawLine(x0,y0,x1,y1,color); //Dibujara una linea desde un punto a otro. y el color en RGB. Eso si, ninguno de los argumentos es char.
oslDrawRect(x0,y0,x1,y1,color); //Dibujara un rectangulo, desde un punto hasta otro.
oslDrawFillRect(x0,y0,x1,y1,color); //Dibujara un rectangulo, y lo rellenara del color que hayamos elegido.
oslDrawGradientRect(x0,y0,x1,y1,color1,color2,color3,color4); //Dibujara un rectangulo con un degradado de 4 colores, a elegir por el usuario.
 
//En las funciones explicadas no se usan x0 o y1, se usan numeros no letras!

Esto es todo. Todo el Módulo Draw en nivel medio.

Descargas

Descargar Material Necesario (Sólo Usuarios Registrados).

4.152175
Tu voto: Ninguno Votos totales: 4.2 (46 votos)

Anuncios Google