[eside-ghost] Mostrar imagen sobre un quad en OpenGL

Eneko chan enekochan en gmail.com
Mie Nov 10 21:03:46 CET 2010


Gracias a los dos. Lo de usar el Gimp para crear un .h (o .c) me ha
recordado cuando cambie en el kernel de Linux hace mucho años a Tux por otra
imagen. Si llego a saber eso entonces... Lo de usar una librería de carga ya
lo dejaría para nota porque me están metiendo prisa (es para ayer como se
suele decir) y hace mil años que no toco C (tengo todo metido en un solo .C
para que os hagáis una idea de que no puedo perder un instante en modularlo
todo como debiera). De momento cargando la imagen .raw puedo tirar.

He quitado lo de las luces y los materiales y por esa parte va bien. De
hecho sin las luces creo que los colores ahora se ven bien de verdad =)

Lo de poner las coordenadas glTexCoords creo que es la base del problema. Si
las pongo a 1 solo aparece la imagen una vez como quiero, pero el quad queda
minúsculo que no se ve casi. Se ve así en la lejanía. Por eso había puesto
50, para hacerlo más grande. Y no puedo tocar la parte que coloca la camara
en donde la coloca. Es precisamente la parte que he puesto en el código "//
Aquí va un código que carga el valor a gl_para". Tal vez podría hacer algo
pero no estoy seguro. En un principio de eso se encarga otra librería (y no
puedo decir mucho más porque no me dejan -.-).

La página de NeHe he caido varias veces buscando lo de las texturas. Tiene
buena pinta pero estoy tan perdido jajaja Menudo lio me he metido yo solo.

2010/11/10 Jon Valdés <juanval en gmail.com>

> Heeey,
>
> OpenGL! Me apunto!
>
> 2010/11/10 Eneko chan <enekochan en gmail.com>:
> > Hola,
> >
> > Espero que esta duda tenga cabida en esta lista, sino pido disculpas por
> > adelantado.
> >
> > Acabo de empezar con OpenGL y me han metido el envolado de hacer una
> especie
> > de presentación con transparencias usando OpenGL de forma que aparezcan
> en
> > un espacio tridimensional y se puedan ir pasando. No puedo usar otra
> > aplicación que haga lo mismo, tiene que ser con OpenGL en C por narices
> ya
> > que debe integrarse en algo que ya existe.
> >
> > Yo había pensado poner un plano (parece que se llaman quad...) y ponerle
> > como textura la imagen que quieren que se vea. La cosa parecía algo
> trivial:
>
> Quad viene de que es un cuadrilátero, y ponerle textura es fácil,
> tranquilo.
>
> > crear un quad y ponerle una imagen (ya fuese PNG o JPG o cualquier otro
> > formato soportado) como textura ocupando toda la superficie y listo. Pero
> me
> > he dado cuenta de que las texturas hay que pasarlas como un "churro" de
> > bytes y luego no es tan sencillo colocarlas en el quad. Lo de cargar la
> > imagen pues lo hago con una imagen en formato "crudo" (.raw pero no de
> > cámara de fotos, sino los bytes RGB tal cual sin cabeceras ni nada) con
> > cualquier programa de retoque y creo la estructura de datos que hace
> falta.
>
> Lo mas facil para esto es pillarte una libreria de carga de imágenes
> (libpng, libjpg, libtga, la que te de la gana), que todas te pasan
> luego los datos en rgb tal y como los quiere opengl.
> Otra opción es lo que dice Sergio de usar el plugin de Gimp que te
> saca una textura en el formato ese que es un array de C en texto, que
> haces un #include directamente en el codigo. Eso sí, esa opcion es un
> tanto menos flexible.
>
> > El problema es que probando y probando solo he conseguido un quad con la
> > imagen repetida miles de veces sobre ella si utilizo la opción GL_REPEAT
> o
> > solo una vez en una esquina en pequeñito si uso la opción GL_CLAMP. He
> > probado con una imagen de 256x256 y otra de 1024x1024 para la textura,
> pero
> > en los dos casos se ve igual.
>
> Esto es sólo porque no estás especificando bien las coordenadas de
> textura. Tienes que poner una esquina del quad con coordenadas de
> textura (0,0), y la otra a (1,1). Con eso ya se te verá bien.
>
> >   // build our texture MIP maps
> >   gluBuild2DMipmaps( GL_TEXTURE_2D, 3, width,
> >     height, GL_RGB, GL_UNSIGNED_BYTE, data );
>
> Hasta ahi todo bien, pero no necesitas crear mipmaps para esto. Con
> usar glTexImage2D puedes hacerlo sin problemas. Si no quieres
> complicarte puedes dejarlo asi, pero la carga será algo más lenta
> (tiene que construir los mipmaps, y eso es por software).
>
> >       glTexCoord2d(0.0,0.0); glVertex2d(-50.0,-50.0);
> >       glTexCoord2d(50.0,0.0); glVertex2d(+50.0,-50.0);
> >       glTexCoord2d(50.0,50.0); glVertex2d(+50.0,+50.0);
> >       glTexCoord2d(0.0,50.0); glVertex2d(-50.0,+50.0);
>
> Aqui están tus glTexCoords, pon esos en el rango [0,1], y la textura
> quedara bien.
>
>
> >   glEnable(GL_LIGHTING);
> >   glEnable(GL_LIGHT0);
> >   glLightfv(GL_LIGHT0, GL_POSITION, light_position);
> >   glLightfv(GL_LIGHT0, GL_AMBIENT, ambi);
> >   glLightfv(GL_LIGHT0, GL_DIFFUSE, lightZeroColor);
>
> Si solo quieres ver una imagen no creo que necesites luces. Si eso,
> quita todo lo relacionado con lights, y listo (y pon un
> glDisable(GL_LIGHTING) por si acaso).
>
> >   glMaterialfv(GL_FRONT, GL_SPECULAR, mat_flash);
> >   glMaterialfv(GL_FRONT, GL_SHININESS, mat_flash_shiny);
> >   glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
>
> Si tampoco necesitas materiales, quita esto.
>
> Lo demás tiene buena pinta.
>
> Como ayuda adicional, para estas cosas siempre puedes contar con NeHe
> (que aunque desfasado, para los principiantes es perfecto):
> http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=06
>
> Ya contarás ;)
> _______________________________________________
> eside-ghost mailing list
> eside-ghost en listas.deusto.es
> https://listas.deusto.es/mailman/listinfo/eside-ghost
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: https://listas.deusto.es/mailman/private/eside-ghost/attachments/20101110/9aab3dd9/attachment.htm 


Más información sobre la lista de distribución eside-ghost