iPhone OpenGL:平铺纹理

时间:2010-11-19 20:07:30

标签: iphone opengl-es

我有点卡在平铺纹理上。基本上我想在变换对象时平铺纹理。所以当我glScale到20,20,20时,1x1x1平方,我希望纹理能够平铺。纹理设置为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 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); 
}

1 个答案:

答案 0 :(得分:3)

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