【问题标题】:iPhone OpenGL Texture loader issuesiPhone OpenGL 纹理加载器问题
【发布时间】: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


【解决方案1】:

好的,以防万一有人想实现这一点,我想通了。您需要做的就是修改 CGContextDrawImage 行并更改宽度和高度参数。

这会导致加载整个纹理,但随后只会绘制此行上指定的区域。

基本上,

CGContextDrawImage(context, CGRectMake(0, 0, width*2, height*2), image.CGImage);

将绘制 1/4 的图像(因为它的高度和宽度是纹理大小的两倍)。

:)

【讨论】:

    猜你喜欢
    • 2010-12-27
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    相关资源
    最近更新 更多