Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Dudas cómo usar glTexImage2d( )

Iniciado por killgates, 30 de Enero de 2016, 05:47:26 PM

« anterior - próximo »

killgates

Hola,

Esto del c++ me está enganchando  :D                8)
Tengo dudas de cómo utilizar la función glTexImage2d( )  .
No entiendo los datos de:
glTexImage2d(gl_texture2d, 0, "internal_format", ancho , alto , 0, "format" , "type", , datos de imagen);

Cómo se yo el tipo de internal format que tiene la textura?
Lo mismo con el format.
Y el type de datos?

Muchas Gracias

killgates

Hola,

Me respondo a mi mismo en parte ..  :D
Si divido la profundiad en bits entre 3 tendré el internal format.

Faltaría el format ..         que el dato de la cabezera del fichero tga ya lo especifica    El más común gl_rgb?

Y el type cómo se sabe?



Gallo

el internal format representa tanto los canales de color como los bits que ocupa cada uno, por ejemplo GL_RGBA8 es para 4 canales de 8 bits, este internal format se corresponderá con el type GL_UNSIGNED_BYTE,  otro internal format seria GL_RG16F, este significaria 2 canales de color con un tamaño half-float (16 bits) y le corresponderia el type GL_FLOAT.   el format es solo los canales que tiene la imagen, es como el internal format pero sin la información de tamaño GL_RGBA32F => GL_RGBA, GL_RG16F => GL_RG.

También puedes usar los valores de format en internal format y dejar que el driver le ponga el tamaño, si no me equivoco siempre pondrá 8 bits por canal, pero yo te recomendaría especificar el internal format con el tamaño, simplemente me parece mas correcto.

el internal format mas común seria GL_RGB8 / GL_RGB  o  GL_RGBA8 / GL_RGBA   y GL_UNSIGNED_BYTE en ambos, es el formato en el que te vendrá un TGA, una cosa importante es que en el shader independientemente si el type es GL_UNSIGNED_BYTE o GL_FLOAT, el color siempre vendrá normalizado como float, los buffers (texturas) de 8 bits por canal contendrán valores entre 0.0 y 1.0 por canal, y los de 16 y 32 bits son las que pueden contener valores fuera de esos rangos, utilizados para casos en los que necesitas una mayor precisión como al guardar valores que no son colores (posición, normales) o imágenes hdri.

killgates

Hola, Gracias por responder,

Es decir..
Si al leer la cabezera del fichero tga. El valo bpp (profundiad de color) es de 24 , entonces se trata de un RGB8/RGB..
Ya que son 8 bits por canal = 8*3=24 ?

Si fuera bpp de 32.. Entonces se trataría de RGBA8/RGBA?
8*4 = 32?

Gallo

Cita de: killgates en 02 de Febrero de 2016, 04:23:58 PM
Hola, Gracias por responder,

Es decir..
Si al leer la cabezera del fichero tga. El valo bpp (profundiad de color) es de 24 , entonces se trata de un RGB8/RGB..
Ya que son 8 bits por canal = 8*3=24 ?

Si fuera bpp de 32.. Entonces se trataría de RGBA8/RGBA?
8*4 = 32?

Exactamente, y en ambos casos GL_UNSIGNED_BYTE







Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.