3

私は数ヶ月前に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では問題が発生することがあります。

私はこれすべてで間違っていますか?

ありがとう

4

2 に答える 2

3

考慮する必要があること:

  • iPhoneは、2の累乗のサイズのテクスチャでのみ機能します。テクスチャにそのようなサイズがなくても機能する場合は、ソフトウェアによってサイズが変更されます。これには時間がかかり、さらに重要なのは価値のあるテクスチャです。メモリー。
  • iPhoneには、1024x1024サイズの約3つのテクスチャ用のビデオメモリがあります。テクスチャメモリが不足する可能性があります。
  • レンダリング中のテクスチャの切り替えは遅い...非常に遅い。テクスチャの切り替えが少ないほど良い–理想的には、最大3つのテクスチャを作成し、最大3回切り替えます。
  • それを達成するには、テクスチャアトラスと呼ばれる手法を学ぶ必要があります
于 2010-01-28T14:22:19.310 に答える
1

テクスチャ メモリが不足している可能性がありますが、使用しているクラスがおそらくイメージを 2 のべき乗までパディングすることを考えると、これは驚くべきことではありません。

スプライトをいわゆるスプライト アトラスに結合することで、テクスチャ メモリをより有効に使用できます。

于 2010-01-28T14:08:17.260 に答える