6

私は2つの画像を持っています:

  1. PNG (sRGB) 64x64 (ネットワークからダウンロード)
  2. PNG (sRGB)、fla から png に移植され、次に png から sRGB を使用して jpg に移植され、次に PNG (sRGB) に移植されます。

この画像から作成されたテクスチャでポリゴンを埋めようとしています:

CCTexture2D *texture = [[CCTextureCache sharedTextureCache] addImage:spriteName];

    polygon = [[[PhisicsFilledPoligon alloc] initWithPoints:points
                         andTexture:texture] autorelease];

PhysicsFilledPolygon は、box2d の PhysicsSprite の一種ですが、「draw」メソッドがオーバーライドされています。

-(void) draw 
{
    ccGLBindTexture2D( [self.texture name] );

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

    ccGLEnableVertexAttribs( kCCVertexAttribFlag_Position | kCCVertexAttribFlag_TexCoords );

    [prog use];
    [prog setUniformForModelViewProjectionMatrix];

    glVertexAttribPointer(kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, sizeof(CGPoint), areaTrianglePoints);
    glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, sizeof(CGPoint), textureCoordinates);

    glDrawArrays(GL_TRIANGLES, 0, areaTrianglePointCount);
}

テクスチャに最初の画像を使用しようとすると、すべて正常に動作します。しかし、私は2番目のものを使用しているため、アプリはエラーでクラッシュします:

*** Assertion failure in -[CCTexture2D setTexParameters:], /Users/SentineL/Documents/squirrels ios/squirrels/libs/cocos2d/CCTexture2D.m:743
2012-05-18 14:42:26.603 squirrels[21436:707] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'GL_CLAMP_TO_EDGE should be used in NPOT textures'

私が使用しようとしている画像が何であれ、結果は同じエラーです。Cocos2d のバージョンは 2.0 rc0 です。ここで cocos2d 情報を開始します。

2012-05-18 14:42:25.038 squirrels[21436:707] cocos2d: OS version: 5.1 (0x05010000)
2012-05-18 14:42:25.041 squirrels[21436:707] cocos2d: GL_VENDOR:   Imagination Technologies
2012-05-18 14:42:25.042 squirrels[21436:707] cocos2d: GL_RENDERER: PowerVR SGX 543
2012-05-18 14:42:25.044 squirrels[21436:707] cocos2d: GL_VERSION:  OpenGL ES 2.0 IMGSGX543-63.24
2012-05-18 14:42:25.047 squirrels[21436:707] cocos2d: GL_MAX_TEXTURE_SIZE: 4096
2012-05-18 14:42:25.048 squirrels[21436:707] cocos2d: GL_MAX_TEXTURE_UNITS: 8
2012-05-18 14:42:25.049 squirrels[21436:707] cocos2d: GL_MAX_SAMPLES: 4
2012-05-18 14:42:25.051 squirrels[21436:707] cocos2d: GL supports PVRTC: YES
2012-05-18 14:42:25.053 squirrels[21436:707] cocos2d: GL supports BGRA8888 textures: YES
2012-05-18 14:42:25.054 squirrels[21436:707] cocos2d: GL supports NPOT textures: YES
2012-05-18 14:42:25.056 squirrels[21436:707] cocos2d: GL supports discard_framebuffer: YES
2012-05-18 14:42:25.057 squirrels[21436:707] cocos2d: compiled with Profiling Support: NO

2012-05-18 14:42:25.059 squirrels[21436:707] cocos2d: **** WARNING **** CC_ENABLE_GL_STATE_CACHE is disabled. To improve performance, enable it by editing ccConfig.h

2012-05-18 14:42:25.061 squirrels[21436:707] cocos2d: cocos2d v2.0.0-rc0
2012-05-18 14:42:25.063 squirrels[21436:707] cocos2d: Using Director Type:CCDirectorDisplayLink
2012-05-18 14:42:25:201 squirrels[21436:707] Retina Display Not supported
2012-05-18 14:42:25.214 squirrels[21436:707] cocos2d: animation started with frame interval: 60.00
2012-05-18 14:42:25.234 squirrels[21436:707] cocos2d: surface size: 1024x768

私の問題はどこですか?

4

4 に答える 4

11

非 2 乗次元のテクスチャを使用しています。

于 2012-05-18T11:23:00.710 に答える
9

問題は、次の行にあると思います。

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

GL_REPEAT は NPOT テクスチャのコア OpenGL ES 2.0 仕様の一部ではなく、GL_CLAMP_TO_EDGE のみが含まれているため、GL_REPEAT はサポートされていません。

基本的に GL_REPEAT の代わりに GL_CLAMP_TO_EDGE を設定するか、POT テクスチャを使用する必要があります。

于 2012-05-23T15:21:40.297 に答える
2

GL_REPEAT を GL_CLAMP_TO_EDGE に切り替えるとエラーが解消され、プロジェクトで再度ビルドされますが、リピート効果が失われました。Cocos2d 2.x にアップグレードした後、これを行う必要がありました。最善の策は、画像のサイズを 2 のべき乗にすることです... ( 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048 )

于 2012-06-12T18:39:04.190 に答える
0

魔法の言葉は次のとおりです。 CCConfiguration.m: // 122 行目付近

supportsNPOT_ = NO; // before it said YES
于 2015-10-16T08:25:24.730 に答える