加载这样的openGL纹理是否正确?

时间:2010-01-28 12:13:58

标签: iphone opengl load textures texture2d

几个月前我开始了一个越来越大的OpenGL项目......我从crashLanding示例开始,然后使用Texture2D。

我还使用单例类来加载我的纹理,这就是纹理加载的样子:

//Load the background texture and configure it
_textures[kTexture_Background] = [[Texture2D alloc] initWithImage: [UIImage imageNamed:@"fond.png"]];
glBindTexture(GL_TEXTURE_2D, [_textures[kTexture_Background] name]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

// Load the textures
_textures[kTexture_Batiment] = [[Texture2D alloc] initWithImage: [UIImage imageNamed:@"batiment_Ext.png"]];
_textures[kTexture_Balcon] = [[Texture2D alloc] initWithImage: [UIImage imageNamed:@"balcon.png"]];
_textures[kTexture_Devanture] = [[Texture2D alloc] initWithImage: [UIImage imageNamed:@"devanture.png"]];
_textures[kTexture_Cactus_Troncs] = [[Texture2D alloc] initWithImage: [UIImage imageNamed:@"cactus-troncs.png"]];
_textures[kTexture_Cactus_Gauche] = [[Texture2D alloc] initWithImage: [UIImage imageNamed:@"cactus1.png"]];
_textures[kTexture_Cactus_Droit] = [[Texture2D alloc] initWithImage: [UIImage imageNamed:@"cactus2.png"]];
_textures[kTexture_Pierre] = [[Texture2D alloc] initWithImage: [UIImage imageNamed:@"pierre.png"]];
_textures[kTexture_Enseigne] = [[Texture2D alloc] initWithImage: [UIImage imageNamed:@"enseigne.png"]];
_textures[kTexture_Menu] = [[Texture2D alloc] initWithImage: [UIImage imageNamed:@"saloonIntro.jpg"]];
_textures[kTexture_GameOver] = [[Texture2D alloc] initWithImage: [UIImage imageNamed:@"gameOver.jpg"]];

for (int i = 0 ; i < kNumTexturesScene ; i ++)
{
    [arrayOfText addObject:[[[NSData alloc] init] autorelease]];    
}
// sort my array
for (int i = 0 ; i < kNumTexturesScene ; i ++)
{
    [arrayOfText replaceObjectAtIndex:i withObject:_textures[i]];
}

[dictionaryOfTexture setObject:[arrayOfText copy] forKey:kTextureDecor];
[arrayOfText removeAllObjects];

等近50张图片

它在3GS上运行良好,但有时候3G存在一些问题。

我错了所有这些吗?

由于

2 个答案:

答案 0 :(得分:3)

您需要考虑的事项:

  • iPhone仅适用于尺寸为2的纹理 - 如果你的纹理没有这样的尺寸,它们仍然有效,这意味着它们会被软件调整大小 - 这需要时间,等等重要的是有价值的纹理记忆。
  • iPhone有大约3个1024x1024大小纹理的视频内存 - 你可能会用完纹理内存。
  • 在渲染过程中切换纹理很慢......非常慢。切换纹理越少越好 - 理想情况下,最多创建3个纹理,最多切换3次
  • 要实现这一点,您需要学习一种名为texture atlasing
  • 的技术

答案 1 :(得分:1)

你的纹理内存可能已经不多了,这并不奇怪 如果您认为您正在使用的课程可能会将您的图像填充为2维的力量。

您可以通过将精灵组合到一起来更好地使用纹理记忆 一个所谓的精灵地图集。