Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: Pogacha en 26 de Agosto de 2005, 05:00:03 PM

Título: Texturas De Opengl Con Sdl
Publicado por: Pogacha en 26 de Agosto de 2005, 05:00:03 PM
 No he instalado el SDL pero lo he mirado mucho, sus infos y ayudas, como tambien el codigo ... no encontre una función que convierta una surface en una textura ... no se por que no hay! ... esta escondida? requiero de otra libreria externa?

Como hago para crear una textura en OpenGL, no hay ninguna función para crearla ? debo hacerlo a pelo desde una Surface de  SDL ? o que se acostumbra?

Saludos.
Título: Texturas De Opengl Con Sdl
Publicado por: LC0 en 26 de Agosto de 2005, 05:06:33 PM
 Por lo que yo se, puedes acceder perféctamente a los píxeles almacenados en el buffer de un surface.  Eso sí, tienes que conocer de antemano los datos de la profundidad de color, orden de los bits, y si lleva canal alpha la imagen o no.

De todas formas yo te recomiendo la biblioteca (que no librería ;)) DeVIL. Llevan bastante tiempo sin sacar una nueva versión, pero su manejko es muy parecido al de OpenGL y, de hecho, está pensada para integrar la carga de bitmaps para este API.
Saludos.
Título: Texturas De Opengl Con Sdl
Publicado por: Ray en 26 de Agosto de 2005, 06:20:28 PM
 No creo que te sea muy complicado crear tu propia función que cargue texturas opengl a partir de surfaces, y aprovechar para incluir en ella las caracteristicas de la textura como el tipo de filtrado, mipmaps, etc. Quizas el unico inconveniente esta en los formatos diferentes, y debas usar SDL_ConvertSurface.
Título: Texturas De Opengl Con Sdl
Publicado por: visualcubb en 26 de Agosto de 2005, 06:43:59 PM
 Hola Pogacha, cargar texturas con SDL es muy fácil, solo tienes que bajar una librería que se llama SDL_image ( http://www.libsdl.org/projects/SDL_image/ ), uncluir el .h y . lib en tu proyecto y después usar el siguiente código:


Estas variables deben ser globales (o privadas dentro de una clase si estás usando POO).

SDL_RWops *rwop;  //variable de SDL_imagen
SDL_Surface *image; //variable de SDL_imagen
GLuint texture; //identificador de textura de OpenGL


Después usas el siguiente código para saber si existe el archivo, considera que BUFF contiene el nombre del archivo:

rwop=SDL_RWFromFile(BUFF, "rb");
if(rwop) image=IMG_LoadPNG_RW(rwop);
else
{
  printf("No existe el archivo");
}


//Verificas que la textura se haya podido guardar bien y si es así, cargas en Memoria:

if(image)
{
 
   glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
   glGenTextures(1,&texture );
   glBindTexture(GL_TEXTURE_2D, texture);

/**************************************/
// Aquí verificas si tiene o no alpha channel
//
/**************************************/
   if(image->format->Amask)
   {
    gluBuild2DMipmaps(GL_TEXTURE_2D,
    GL_RGBA,image->w, image->h,
    GL_RGBA, GL_UNSIGNED_BYTE,image->pixels);
    }
    else
   {
   gluBuild2DMipmaps(GL_TEXTURE_2D,
   GL_RGB,image->w, image->h,
   GL_RGB, GL_UNSIGNED_BYTE,image->pixels);
  }

//Colocas el filtro correspondiente
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR);


// Y finalmente creas la imágen en OpenGL.
if(image->format->Amask)
{
 glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,image->w,
 image->h,0,GL_RGBA,GL_UNSIGNED_BYTE,image->pixels);
}
else
{
 glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,image->w,
 image->h,0,GL_RGB,GL_UNSIGNED_BYTE,image->pixels);
}

}

}


Después para usarla solo tienes que llamar a glBindTexture(GL_TEXTURE_2D, texture); antes de dibujar tu modelo y listo.


Saludos.
Título: Texturas De Opengl Con Sdl
Publicado por: visualcubb en 26 de Agosto de 2005, 06:48:08 PM
 Se me olvidaba, IMG_LoadPNG_RW(rwop); carga PNG, si quieres que cargue otro tipo de textura simplemente cambiale PNG por BMP, TGA, JPG o lo que necesites, si tienes dudas revisa la documentación.
Título: Texturas De Opengl Con Sdl
Publicado por: Pogacha en 26 de Agosto de 2005, 09:33:53 PM
 Luego de leerme todo y no encontrar la funcion, supuse que no existia, pero me parecio raro que no la tenga ... o sea ... es casí obvio que si vas a dar soporte a OpenGL deberias facilitar el juego de funciones basicas.

O sea ... deberia proponer que existan:
#define SDL_GL_MIPMAPS               0x0001
#define SDL_GL_MINFILTERLINEAR 0x0002
#define SDL_GL_MAXFILTERLINEAR 0x0004
#define SDL_GL_TODOLOOTRO       0xXXXX

bool SDL_GLGenTexture1d(SDL_Surface *s, int Caracteristicas, int &TexturaId);
bool SDL_GLGenTexture2d(SDL_Surface *s, int Caracteristicas, int &TexturaId);
bool SDL_GLGenTextureCubeMap(SDL_Surface *s[6], int Caracteristicas, int &TexturaId);

Pero supongo que es algo con la filosofia de OpenGL ...
Gracias a todos.
Saludos.
Título: Texturas De Opengl Con Sdl
Publicado por: visualcubb en 26 de Agosto de 2005, 10:46:12 PM
Cita de: "Pogacha"Luego de leerme todo y no encontrar la funcion, supuse que no existia, pero me parecio raro que no la tenga ... o sea ... es casí obvio que si vas a dar soporte a OpenGL deberias facilitar el juego de funciones basicas.

O sea ... deberia proponer que existan:
#define SDL_GL_MIPMAPS               0x0001
#define SDL_GL_MINFILTERLINEAR 0x0002
#define SDL_GL_MAXFILTERLINEAR 0x0004
#define SDL_GL_TODOLOOTRO       0xXXXX

bool SDL_GLGenTexture1d(SDL_Surface *s, int Caracteristicas, int &TexturaId);
bool SDL_GLGenTexture2d(SDL_Surface *s, int Caracteristicas, int &TexturaId);
bool SDL_GLGenTextureCubeMap(SDL_Surface *s[6], int Caracteristicas, int &TexturaId);

Pero supongo que es algo con la filosofia de OpenGL ...
Gracias a todos.
Saludos.
No entiendo... ¿no te sirvió el código que te puse antes?... a mi me funciona.

Saludos.
Título: Texturas De Opengl Con Sdl
Publicado por: Pogacha en 27 de Agosto de 2005, 12:22:50 AM
 No el codigo, aun que lo probe debe andar, muchas gracias, mi exclamación era por que SDL no tuviera estas funciones, lo cual me parecia raro, entonces pregunté. En realidad el thread deberia ser: Hay funciones del SDL que generen la textura automaticamente?

Gracias de nuevo.
Saludos.
Título: Texturas De Opengl Con Sdl
Publicado por: vicho en 27 de Agosto de 2005, 09:36:07 AM
 SDL no tiene esas funciones ya que la generacion de texturas son cosas de OPENGL