3D y 2D a la vez

36 views
Skip to first unread message

JJcorps

unread,
Feb 1, 2007, 8:46:30 AM2/1/07
to SDL en español
Hola

¿Hay alguna manera de usar OpenGL y SDL usando las funciones 3D de
OpenGL y las funciones 2D de SDL en un mismo programa, para podre
blitear sobre opengl?

Hay una opcion en SetVideoMode que es SDL_OPENGLBLIT que dice que esta
ahi por tema de compatibilidad y recomienda no usarlo en programas
nuevos. Buscando en google me encuentro con esto:

http://twomix.devolution.com/pipermail/sdl/2001-November/039852.html

Si alguien conoce alguna manera que no sea con OpenGLBlit o si es con
esa y la hecho funcionar que cuente su experiencia.

gracias

RCAF

unread,
Feb 1, 2007, 1:42:36 PM2/1/07
to SDL en español
Solo debes crear un contexto opengl en SDL.

Al inicializar el modo de video, llamas a la función SDL_SetVideoMode
con el flag SDL_OPENGL:

SDL_SetVideoMode(800, 600, 32, SDL_OPENGL);

Luego debes setear algunos atributos del contexto OpenGL:

// 8 bits para cada componente rojo, verde y azul
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);

// 32 bits por pixel
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 32);

// con double buffer
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);

Luego para trabajar en modo 2D, se debe crear una proyección
ortográfica:

// Color negro para limpiar framebuffer
glClearColor(0.f, 0.f, 0.f, 0.f);

// Tamaño ventana
glViewport(0, 0, 800, 600);

// Creamos la proyección ortográfica
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
gluOrtho2D(0, 800, 600, 0);

Ahora para mostrar una imagen en pantalla, deberás cargarla con la
función IMG_Load (SDL_image) y a partir de esta crear una textura 2D,
con las funciones: glGenTextures, glBindTexture, glTexImage2D,
glTexParameterf.

Para dibujar la textura utilizarás las funciones de OpenGL. Se resume
en seleccionar la textura que quieres mostrar con la funcion
glBindTexture, y luego usar transformaciones para mostrar la imagen:
glTranslatef, glScaled, glRotatef. Ojo que la textura se debe aplicar
a un polígono, para este caso se usa un cuadrado: GL_QUADS.

Por ultimo la función de page flipping SDL_Flip, es cambiada por
SDL_GL_SwapBuffers.

Y en general esos son los pasos para trabajar con OpenGL y SDL. Todo
los demás se usa igual, el manejo de eventos, sonido, etc.

Si quieres mostrar texto en OpenGL puedes usar SDL_ttf, pero al igual
que las imagenes, se deben transformar en texturas antes de mostrarse.
También puedes usar la biblioteca QuesoGLC.

Más info en la documentación oficial de SDL:

http://docs.mandragor.org/files/Common_libs_documentation/SDL/SDL_Documentation_project_en/guidevideoopengl.html

RCAF

unread,
Feb 1, 2007, 1:47:52 PM2/1/07
to SDL en español
Me falto comentar que para este caso hay que olvidarse de los blitting
via SDL, me refiero a la función SDL_BlitSurface.

Ahora el proceso de blitting es realizado por OpenGL, cuando se
muestra un poligono (cuadrado) con un textura (imagen).

JJcorps

unread,
Feb 10, 2007, 5:03:46 AM2/10/07
to SDL en español
Hasta ahora lo estaba haciendo de esa manera, pero me parecia 'un
coñazo' la que se tiene que liar para poner algo en la pantalla.
Intentare hacer unas clases y eso para que sea mas facil y las pondre
por aki.

Reply all
Reply to author
Forward
0 new messages