ios objective-c opengl-es textures

ios - Convertir un UIImage en una textura



objective-c opengl-es (2)

Otra forma de hacerlo utilizando el marco GLKit:

//Path to image NSString *path = [[NSBundle mainBundle] pathForResource:@"textureImage" ofType:@"png"]; //Set eaglContext [EAGLContext setCurrentContext:[[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]]; //Create texture NSError *theError; GLKTextureInfo *texture = [GLKTextureLoader textureWithContentsOfFile:filePath options:nil error:&theError]; glBindTexture(texture.target, texture.name);

texture.name es el nombre del contexto de OpenGL para la textura.

En mi proyecto OpenGL necesito convertir un UIImage en textura; ¿Cuál es la manera de hacerlo? ¿Me puedes ayudar?


No he probado lo siguiente, pero descompondré la conversión en 3 pasos:

  1. Extrae información para tu imagen:

    UIImage* image = [UIImage imageNamed:@"imageToApplyAsATexture.png"]; CGImageRef imageRef = [image CGImage]; int width = CGImageGetWidth(imageRef); int height = CGImageGetHeight(imageRef);

  2. textureData un textureData con las propiedades anteriores:

    GLubyte* textureData = (GLubyte *)malloc(width * height * 4); // if 4 components per pixel (RGBA) CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); NSUInteger bytesPerPixel = 4; NSUInteger bytesPerRow = bytesPerPixel * width; NSUInteger bitsPerComponent = 8; CGContextRef context = CGBitmapContextCreate(textureData, width, height, bitsPerComponent, bytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big); CGColorSpaceRelease(colorSpace); CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef); CGContextRelease(context);

  3. Configura tu textura:

    GLuint textureID; glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glGenTextures(1, &textureID); glBindTexture(GL_TEXTURE_2D, textureID); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, textureData);

EDITAR:

Lea esto tut ; todo se explica desde la conversión de una imagen a una textura y aplicando una textura en un entorno iOS.