Extracting textures from large bmps

Started by
11 comments, last by fooman_69 18 years, 10 months ago
hiya, Is there a way to extract a 16x16 piece of a larger BMP picture that I can use as a texture?? The only way I know how to do it as of now is to load the entire BMP and figure out what part of it to draw in my Render() method. The issue I have is that I need to change the texture (which is being used by many tiles in my 2D game). So I figured if I need to change it (making part of the texture transparent later in the game) I would have to make more than one copy of the texture so every object's texture would not change, only the one I want to change. anyways, if you can help me I'd be very thankful.
Advertisement
load the bitmap, create a texture object and initalise it with glTexImage() to 16x16 in size and NULL for the data location and then use glSubTeximage() to select the correct 16x16 image from the bitmap and copy it into the texture.

job done.
Ok thanks!!
Sounds easy, but we will see haha.
Take a look at This also if you are having trouble. It deals with isolating areas in a larger texture so that smaller textures could be created.
This topic sure does come up a lot in this forum. _the_phantom_, perhaps you could add in something to the forum FAQ [wink]
Is glSubTexImage() a well-known function??? I searched google and found nothing useful, and when I try to build my prog it gives me
Desktop\OpenGL\GorillaTesting\video.cpp(124): error C3861: 'glSubTexImage': identifier not found, even with argument-dependent lookup
I'm not sure what arguements that function takes anyhow...
Quote:Original post by fooman_69
Is glSubTexImage() a well-known function???
It should be glTexSubImage2D.
Indeed!!
Now I have a question... how do I select the 16x16 region I wish to use for the texture. Do I use that xoffset and yoffset values for this?? If so, which corner is 0,0??

BTW, thanks so much for all these links!!
NAME       glTexSubImage2D - specify a two-dimensional texture subimageC SPECIFICATION       void glTexSubImage2D( GLenum target,                             GLint level,                             GLint xoffset,                             GLint yoffset,                             GLsizei width,                             GLsizei height,                             GLenum format,                             GLenum type,                             const GLvoid *pixels )PARAMETERS       target   Specifies the target texture.  Must be GL_TEXTURE_2D.       level    Specifies  the  level-of-detail  number.   Level 0 is the base                image level.  Level n is the nth mipmap reduction image.       xoffset  Specifies a texel offset in the x direction within the texture                array.       yoffset  Specifies a texel offset in the y direction within the texture                array.       width    Specifies the width of the texture subimage.       height   Specifies the height of the texture subimage.       format   Specifies the  of the pixel data.  The following symbolic val-                ues  are  accepted: GL_COLOR_INDEX, GL_RED, GL_GREEN, GL_BLUE,                GL_ALPHA, GL_RGB, GL_BGR, GL_RGBA, GL_BGRA, GL_LUMINANCE,  and                GL_LUMINANCE_ALPHA.       type     Specifies the data type of the pixel data.  The following sym-                bolic  values   are   accepted:   GL_UNSIGNED_BYTE,   GL_BYTE,                GL_BITMAP,   GL_UNSIGNED_SHORT,   GL_SHORT,   GL_UNSIGNED_INT,                GL_INT,           GL_FLOAT,            GL_UNSIGNED_BYTE_3_3_2,                GL_UNSIGNED_BYTE_2_3_3_REV,           GL_UNSIGNED_SHORT_5_6_5,                GL_UNSIGNED_SHORT_5_6_5_REV,        GL_UNSIGNED_SHORT_4_4_4_4,                GL_UNSIGNED_SHORT_4_4_4_4_REV,      GL_UNSIGNED_SHORT_5_5_5_1,                GL_UNSIGNED_SHORT_1_5_5_5_REV,        GL_UNSIGNED_INT_8_8_8_8,                GL_UNSIGNED_INT_8_8_8_8_REV,  GL_UNSIGNED_INT_10_10_10_2,  and                GL_UNSIGNED_INT_2_10_10_10_REV.       pixels   Specifies a pointer to the image data in memory.DESCRIPTION       Texturing maps a portion of a specified texture image onto each graphi-       cal  primitive  for  which texturing is enabled.  To enable and disable       two-dimensional texturing, call glEnable and  glDisable  with  argument       GL_TEXTURE_2D.       glTexSubImage2D  redefines  a  contiguous subregion of an existing two-       dimensional texture image.  The texels referenced by pixels replace the       portion  of the existing texture array with x indices xoffset and xoff-       set+width−1, inclusive, and y  indices  yoffset  and  yoffset+height−1,       inclusive.  This region may not include any texels outside the range of       the texture array as it was originally specified.  It is not  an  error       to  specify a subtexture with zero width or height, but such a specifi-       cation has no effect.
The xoffset and yoffset part is confusing me to no end.
I have stored the coords of the correct portion of the BMP in my Sprite class, so how do I use this in the glTexSubImage2D() function?? I also have no idea how to copy this data into the texture, as instructed by the 1st reply...

I guess I'll take a break. I obviously am slow.

This topic is closed to new replies.

Advertisement