向渲染对象添加纹理会导致对象全黑,即OpenGL ES 2.0

时间:2016-03-09 17:18:08

标签: ios opengl-es opengl-es-2.0

我正在尝试使用Xcode中的openGL ES 2.0向正方形添加纹理,并通过创建两个三角形来创建正方形。当我运行该项目时,方块变为全黑。我认为这与我为纹理添加错误的坐标有关。

保存所有数据的结构

typedef struct {
float Position[3];
float Color[4];
float TexCoord[2];
} Vertex;

位置,颜色和纹理的坐标

const Vertex Vertices[] = {

//postion    color         Texture
{{1, -1, 0}, {1, 0, 0, 1}, {1, 0}},
{{1, 1, 0}, {0, 1, 0, 1}, {1, 1}},
{{-1, 1, 0}, {0, 0, 1, 1}, {0, 1}},
{{-1, -1, 0}, {0, 0, 0, 1}, {0, 0}}
};

创建两个三角形的坐标

const GLubyte Indices[] = {
0, 1, 2,
2, 3, 0
};

设置纹理

   - (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;    
}

而不是使用:glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

我用过:glTexParameteri(GL_TEXTURE_BINDING_2D, GL_TEXTURE_WRAP_S, GL_NEAREST);

但仍然没有运气。

0 个答案:

没有答案