Cuando cargo texturas de imágenes normalmente, están boca abajo debido al sistema de coordenadas de OpenGL. ¿Cuál sería la mejor manera de darle la vuelta?Voltear la textura OpenGL
- glScalef (1.0f, -1.0f, 1.0f);
- cartografía de las coordenadas y de las texturas a la inversa
- voltear verticalmente los archivos de imagen de forma manual (en Photoshop)
- dándoles la vuelta programáticamente después de cargarlas (no sé cómo)
Esto es el método que estoy usando para cargar texturas png, en mi archivo Utilities.m (Objective-C):
+ (TextureImageRef)loadPngTexture:(NSString *)name {
CFURLRef textureURL = CFBundleCopyResourceURL(
CFBundleGetMainBundle(),
(CFStringRef)name,
CFSTR("png"),
CFSTR("Textures"));
NSAssert(textureURL, @"Texture name invalid");
CGImageSourceRef imageSource = CGImageSourceCreateWithURL(textureURL, NULL);
NSAssert(imageSource, @"Invalid Image Path.");
NSAssert((CGImageSourceGetCount(imageSource) > 0), @"No Image in Image Source.");
CFRelease(textureURL);
CGImageRef image = CGImageSourceCreateImageAtIndex(imageSource, 0, NULL);
NSAssert(image, @"Image not created.");
CFRelease(imageSource);
GLuint width = CGImageGetWidth(image);
GLuint height = CGImageGetHeight(image);
void *data = malloc(width * height * 4);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
NSAssert(colorSpace, @"Colorspace not created.");
CGContextRef context = CGBitmapContextCreate(
data,
width,
height,
8,
width * 4,
colorSpace,
kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host);
NSAssert(context, @"Context not created.");
CGColorSpaceRelease(colorSpace);
CGContextDrawImage(context, CGRectMake(0, 0, width, height), image);
CGImageRelease(image);
CGContextRelease(context);
return TextureImageCreate(width, height, data);
}
Dónde TextureImage es una estructura que tiene una altura, anchura y datos * vacíos.
Ahora mismo estoy jugando con OpenGL, pero luego quiero intentar hacer un simple juego de 2d. Estoy usando Cocoa para todas las ventanas y Objective-C como el idioma.
Además, otra cosa que me preguntaba: si hiciera un juego simple, con los píxeles asignados a las unidades, ¿estaría bien configurarlo para que el origen esté en la esquina superior izquierda (preferencia personal), o ¿me encontraría con problemas con otras cosas (por ejemplo, renderizado de texto)?
Gracias.
Posible duplicado de http://stackoverflow.com/questions/506622/cgcontextdrawimage-draws-image-upside-down-when-passed-uiimage-cgimage –
Tienes razón, y gracias, encontré una buena respuesta allí . – mk12