iPhone OpenGLES纹理加载问题与透明度

iPhone OpenGLES纹理加载问题与透明度,iphone,objective-c,opengl-es,textures,transparent,Iphone,Objective C,Opengl Es,Textures,Transparent,我一直在使用这种方法(我想我是从苹果的一个示例代码项目中得到的): 然后在initWithCoder方法中加载纹理: glGenTextures(NUM_OF_TEXTURES, &textures[0]); [self loadTexture:@"1.png" intoLocation:textures[0]]; [self loadTexture:@"2.png" intoLocation:textures[1]]; [self loadTexture:@"3.png" intoLo

我一直在使用这种方法(我想我是从苹果的一个示例代码项目中得到的):

然后在
initWithCoder
方法中加载纹理:

glGenTextures(NUM_OF_TEXTURES, &textures[0]);
[self loadTexture:@"1.png" intoLocation:textures[0]];
[self loadTexture:@"2.png" intoLocation:textures[1]];
[self loadTexture:@"3.png" intoLocation:textures[2]];
[self loadTexture:@"4.png" intoLocation:textures[3]];
[self loadTexture:@"5.png" intoLocation:textures[4]]; 
现在这对我来说很好,但是当加载的图像包含透明区域时,它们会显示前面的图像

例如,如果所有五个图像上都有透明区域:

  • 1.png将按其应有的方式显示
  • 2.png将以1.png作为背景显示
  • 3.png将以2.png为背景显示,1.png为背景
  • 等等
我原以为这会出现在我的绘图代码中,但即使禁用GL_BLEND,这种情况仍然会发生。我正在使用
GL\u TRIANGLE\u FAN
绘制顶点数组

编辑:进一步解释

以下是我在游戏中使用的3种纹理:

使用代码加载纹理,并在绑定纹理和绘图后,会发生以下情况:

当然,这并不是透明的初衷。如果有人能帮忙,那就太好了


谢谢,我也有同样的问题。在将纹理绘制到CGContextRef之前,需要清除它。它恰好保存了最后一个图像,也可能是未初始化的内存或其他东西

CGContextClearRect( cgContext, CGRectMake( 0.0f, 0.0f, width, height ) );

在您的
CGContextDrawImage
之前调用此选项,这是一种透明功能,让您可以看到下面的层。我不确定这里的问题是什么。我已经更新了这个问题,使它更容易理解。第二个图像是绑定每个纹理时发生的情况。所以对于“Img 3”,我只想看到红色的方块来画,而“Img 2”——绿色的方块来画,等等……谢谢!我不知道为什么我使用的示例中没有包含这一点。解决了我的问题:)
CGContextClearRect( cgContext, CGRectMake( 0.0f, 0.0f, width, height ) );