【发布时间】:2011-04-09 08:23:58
【问题描述】:
好的,我想要实现的是将图像加载为单个资源,然后将图像的不同部分保存为许多不同的纹理(基本上将图像切成小方块,然后分别保存)。
对于我的游戏,简单地将原始图像的不同部分映射到我的形状是行不通的,并且能够将每个“平铺”作为单独的纹理将是很棒的。
下面是我用于纹理加载器的代码。我试过弄乱正在加载的纹理的宽度和高度,但得到了一些奇怪的结果。
任何建议将不胜感激。
谢谢
glBindTexture(GL_TEXTURE_2D, texture[0]);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
NSString *path =
[[NSBundle mainBundle] pathForResource:@"checkerplate" ofType:@"png"];
NSData *texData = [[NSData alloc] initWithContentsOfFile:path];
UIImage *image = [[UIImage alloc] initWithData:texData];
GLuint width = CGImageGetWidth(image.CGImage);
GLuint height = CGImageGetHeight(image.CGImage);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
void *imageData = malloc( height * width * 4 );
CGContextRef context = CGBitmapContextCreate(
imageData, width, height, 8, 4 * width, colorSpace,
kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big );
CGColorSpaceRelease( colorSpace );
CGContextClearRect( context, CGRectMake( 0, 0, width, height ) );
CGContextTranslateCTM( context, 0, height - height );
CGContextDrawImage( context, CGRectMake( 0, 0, width, height ), image.CGImage );
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA,
GL_UNSIGNED_BYTE, imageData);
CGContextRelease(context);
free(imageData);
[image release];
[texData release];
【问题讨论】:
-
@simo311:我已重新格式化您的代码以显示没有水平滚动条。如果您不同意,请随时回滚我的更改。
标签: iphone opengl-es mapping textures