开发者

iPhone OpenGL : Tiling textures

I a bit stuck on tiling textures. Basically I want to to tile textures when I transform an object. So a 1x1x1 square when I glScale to 20,20,20, I would like the texture to tile. The texture is setup as a 1x1,

    - (void)loadTextures:(NSString *)textureName andWithIndex:(int)index { 

 // load image as a CG ref 
 CGImageRef textureImage = [UIImage imageNamed:textureName].CGImage;
 // if failed, bail
 if (!textureImage) { 
  NSLog(@"Error: failed to load texture"); 
  return;
 }


 // figure out the width and height
 int texWidth = CGImageGetWidth(textureImage); 
 int texHeight = CGImageGetHeight(textureImage);

 // alloc space for the texture
 GLubyte *textureData = (GLubyte *)malloc(texWidth * texHeight * 4);

 // create a CA 开发者_JAVA百科context ref
 CGContextRef textureContext = CGBitmapContextCreate( 
              textureData, texWidth, texHeight, 8, texWidth * 4, 
              CGImageGetColorSpace(textureImage),
              kCGImageAlphaPremultipliedLast
              );

 // draw the image to in-memory buffer
 CGContextDrawImage(textureContext, CGRectMake(0,0,texWidth,texHeight), textureImage);

 // done with context - release it
 CGContextRelease(textureContext); 

 // have GL create handle for our texture
 glGenTextures(1, &textures[index]); 

 // tell GL that the image is 2D
 glBindTexture(GL_TEXTURE_2D, textures[index]);

 // send our data down to GL, copy into graphics hardware
 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texWidth, texHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, textureData);

 // free our in-memory copy of the data
 free(textureData);

 // specify min/max filters
 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

 // tell GL to turn on textures
 glEnable(GL_TEXTURE_2D); 
}


glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glScalef(20,20,1);
glMatrixMode(GL_MODELVIEW);
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜