0

ここにあるRayWenderlichOpenGLチュートリアルをアプリの開始点として使用しています。しかし、自分のテクスチャを追加すると、いくつかの問題が発生しました。プロジェクトに追加する画像が何であっても、真っ黒になります。png(サンプルで使用されている)とJPEGのさまざまな設定を試しました。デフォルトでロードおよび描画されるファイル名を変更し、別のテクスチャインスタンスを作成してみましたが、どちらも黒くなりました。

Photoshopで床のテクスチャを開いて保存しようとすると、ゲームに表示されなくなりました。

しかし、プロジェクトの元のtile_floor.pngファイルを別の名前で複製してみましたが、これは完全に機能するため、openglには非常に特殊な形式が必要であると思います。

これを機能させるにはどうすればよいですか?

編集:

これは、画像をロードするために使用される方法です。

static GLuint setupTexture(NSString *fileName) {

// 1
CGImageRef spriteImage = [UIImage imageNamed:fileName].CGImage;
if (!spriteImage) {
    NSLog(@"Failed to load image %@", fileName);
    exit(1);
}

// 2
size_t width = CGImageGetWidth(spriteImage);
size_t height = CGImageGetHeight(spriteImage);

GLubyte * spriteData = (GLubyte *) calloc(width*height*4, sizeof(GLubyte));

CGContextRef spriteContext = CGBitmapContextCreate(spriteData, width, height, 8, width*4, CGImageGetColorSpace(spriteImage), kCGImageAlphaPremultipliedLast);    

// 3
CGContextDrawImage(spriteContext, CGRectMake(0, 0, width, height), spriteImage);

CGContextRelease(spriteContext);

// 4
GLuint texName;
glGenTextures(1, &texName);
glBindTexture(GL_TEXTURE_2D, texName);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, spriteData);

free(spriteData);        
return texName;

}
4

2 に答える 2

4

2の累乗以外のテクスチャの場合、glTexImage2Dの前にテクスチャのパラメータGL_CLAMP_TO_EDGEを設定する必要があります。

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
于 2012-09-11T20:02:43.313 に答える
0

私の問題は、画像のサイズが2の累乗(2、4、8、16、32、64、128、256、512、1024)ではないことです。どうやらOpenGLESはこれを必要とします。

于 2012-08-17T06:46:08.137 に答える