Jump to content
  • Advertisement
Sign in to follow this  
nick5454

OpenGL Help with spritesheet texture coords

This topic is 3262 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Okay I have taken the GLSprite example with iPhone Apple opengl es When it's 1 texture (32x32) I can draw it fine. But I created a sprite sheet ( 96x32 ) It's a horizontal sheet with 3 (32x32) images with 1 row. It always appears as white with the sheet, but correctly when it's a single image. Here are my defines ( I tried and prefer 1:1 pixel coords but I doubt it's possible) Sprite (32x32) // Sets up an array of values to use as the sprite vertices. const GLfloat spriteVertices[] = { -16.0f, -16.0f, 16.0f, -16.0f, -16.0f, 16.0f, 16.0f, 16.0f }; Texture Coords // Sets up an array of values for the texture coordinates. const GLshort spriteTexcoords[] = { 0, 0, // bottom left 96, 0, // bottom right 0, 32, // top left 96, 32, // top right }; // Sets up an array of values for the texture coordinates. const GLshort spriteWallcoords[] = { 0, 0, // bottom left 32, 0, // bottom right 0, 32, // top left 32, 32, // top right }; /* // Sets up an array of values for the texture coordinates. const GLshort spriteTexcoords[] = { 0, 0, // bottom left 1, 0, // bottom right 0, 1, // top left 1, 1, // top right }; // Sets up an array of values for the texture coordinates. const GLshort spriteWallcoords[] = { 0, 0, // bottom left 1/3, 0, // bottom right 0, 1, // top left 1/3, 1, // top right }; */ Load Texture if(spriteImage) { // Allocated memory needed for the bitmap context spriteData = (GLubyte *) malloc(width * height * 4); // Uses the bitmatp creation function provided by the Core Graphics framework. colorSpace = CGColorSpaceCreateDeviceRGB(); spriteContext = CGBitmapContextCreate(spriteData, width, height, 8, width * 4,colorSpace, kCGImageAlphaPremultipliedLast); // After you create the context, you can draw the sprite image to the context. CGContextDrawImage(spriteContext, CGRectMake(0.0, 0.0, (CGFloat)width, (CGFloat)height), spriteImage); // You don't need the context at this point, so you need to release it to avoid memory leaks. CGContextRelease(spriteContext); // Use OpenGL ES to generate a name for the texture. glGenTextures(1, &spriteTexture); // Bind the texture name. glBindTexture(GL_TEXTURE_2D, spriteTexture); // Speidfy a 2D texture image, provideing the a pointer to the image data in memory glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, spriteData); // Release the image data free(spriteData); Display Texture(drawView) glViewport(0, 0, backingWidth, backingHeight); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrthof(0, backingWidth, backingHeight, 0, -20, 20); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); // Make sure texturing is enabled glEnableClientState(GL_TEXTURE_COORD_ARRAY); glEnableClientState(GL_VERTEX_ARRAY); // Clear background to beautiful green :o) glClearColor(1.0, 1.0, 0.0, 1.0); glClear(GL_COLOR_BUFFER_BIT); // setup viewport and projection glTranslatef(100.0f,100.0f, 0.0f); glTexCoordPointer(2, GL_SHORT, 0, spriteWallcoords); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); Any advice is greatly appreciated. Thanks, Nick

Share this post


Link to post
Share on other sites
Advertisement
Hi nick5454, the problem looks to be that you're attempting to pass your texture coordinates as a short. So when you try to do 1 / 3, you wind up with 0, rather than .333333 as you are expecting. This is because it's using integer division as opposed to floating point. Easiest fix would to just swap over to using floats for your tex coordinates.

Share this post


Link to post
Share on other sites
I tried that also....It comes over as a white square.

I changed the struct and the calls to "GLfloat" and "GL_FLOAT" respectively.

Any advice is appreciated.

Share this post


Link to post
Share on other sites
I'm an idiot.....

my image is 96x32.....( 96 not ^2 )

my question is: when they say power of 2 does that mean image must have equal length and width or both must be a power of 2, but they may be different sizes.

???

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!