domingo, 29 de abril de 2012

Arnow2D: Capturas de pantalla y uso de teclado


Artículo perteneciente a la sección de motores gráficos



Hola a todos...

Este capitulo se basa en explicar como hacer una captura de pantalla desde nuestro motor gráfico , así como usar el teclado con GLFW para activar dicha captura.

La captura de pantalla la realizaremos pidiendole a OpenGL que nos dé el buffer donde se pinta la pantalla y cargandolo mediante corona como si fuera una textura, para despues , mediante esta libreria grabarlo en un fichero.

La lectura de teclado se hace directamente mediante GLFW con la función: glfwGetKey

Así pues, vamos a mirar el código:


char data[1024*1024*4];

void A2D_Capture(char  *file)
{
int i;
corona::Image* imagen=NULL;

glReadPixels(0,0,1024,768, GL_RGBA , GL_BYTE, data);

for(i = 3 ; i<1024*768*4; i+=4)
data[i] = 255;

imagen = corona::CreateImage(1024,768,corona::PF_R8G8B8A8,data);
imagen = corona::FlipImage(imagen,corona::CA_X);
corona::SaveImage(file,corona::FF_AUTODETECT,imagen);
delete(imagen);
}

Como podeis observar: glReadPIxels nos devuelve en el vector data, toda la información correspondiente a la pantalla.

Este código:

for(i = 3 ; i<1024*768*4; i+=4)
data[i] = 255;

Es un apaño para que la imagen resultante me salga más luminosa (es el parametro de alpha).No se por que la imagen me salia todo oscurecida...si alguien tiene propuestas para hacerlo mejor que me lo diga.

Con este código invertimos la imagen en el eje x (el formato de imagen no es el mismo)
imagen = corona::FlipImage(imagen,corona::CA_X);

Y finalmente con este código grabamos el archivo en cuestión:
corona::SaveImage(file,corona::FF_AUTODETECT,imagen);


Finalmente solo nos queda hacer la llamada a esta función cuando el usuario le de a la tecla F12:

void Draw(void)
{
A2D_Draw(0,0,graf[0]);
A2D_Draw(500,0,graf[1]);
A2D_Draw(0,300,graf[2]);
A2D_Draw(500,300,graf[3]);

if ( glfwGetKey(GLFW_KEY_F12) )
{
A2D_Capture("A2DShot.png");
}
}

Y con esto os dejo hasta el siguiente capitulo...

Espero que os haya gustado y hagáis aprendido.

Nos vemos

LordPakusBlog

0 comentarios :

Publicar un comentario

Entradas populares