我正在使用RayWenderlich OpenGL教程,发现here作为应用程序的起点。 虽然加入我自己的纹理,但我遇到了一些困难。无论我添加到该项目中的任何图像都会呈现黑色。我已经尝试了不同的png(用于示例)和JPEG的设置。我试过只是改变默认加载和绘制的文件名,并创建一个不同的纹理实例,并且都是黑色的。OpenGL:只有一些纹理可以工作
我试过在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;
}
我经常遇到困难让OpenGL设置恰到好处。听起来就是这个问题。你为什么不向我们展示一些相关的代码,我们可能会提供帮助? – jakev 2012-08-17 00:49:59
真的没有太多相关的代码,只是样本中的内容。它带有一个方法,您可以放入文件名,并返回与纹理关联的GLuint。我只是将输入字符串更改为我的纹理。我将把代码放在问题中。 – Bananable 2012-08-17 04:33:50