當我通常從圖像加載紋理時,由於OpenGL的座標系統,它們是顛倒的。什麼是翻轉它們的最好方法?翻轉OpenGL紋理
- glScalef(1.0f,-1.0f,1.0f);
- 映射貼圖的y座標反向
- 手動垂直翻轉的(在Photoshop)
- 它們加載後翻轉他們編程的圖像文件(我不知道如何)
這是
+ (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);
}
哪裏TextureImage是具有高度,寬度和無效*數據一個結構:我使用加載PNG紋理,在我的Utilities.m文件的方法(目標-C)。
現在我只是玩OpenGL,但後來我想嘗試做一個簡單的2D遊戲。我將Cocoa用於所有窗口和Objective-C語言。另外,我想知道的另一件事情是:如果我製作了一個簡單的遊戲,將像素映射到單位,將它設置爲原點位於左上角(個人偏好),是否可以,或者我會遇到其他問題(例如文本渲染)的問題?
謝謝。
可能的重複http://stackoverflow.com/questions/506622/cgcontextdrawimage-draws-image-upside-down-when-passed-uiimage-cgimage – 2010-06-05 20:54:13
你是對的,謝謝,我在那裏找到了一個很好的答案。 – mk12 2010-06-05 21:52:33