当我通常从图像加载纹理时,它们是颠倒的,因为OpenGL的坐标系。最好的翻转方式是什么?
-
glscalef(1.0f,-1.0f,1.0f);
-
反向映射纹理的Y坐标
-
手动垂直翻转图像文件(在Photoshop中)
-
加载后按程序翻转它们(我不知道如何操作)
这是我在utilities.m文件(objective-c)中用于加载PNG纹理的方法:
+ (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是一个具有高度、宽度和void*数据的结构。
现在我只是在玩OpenGL,但后来我想尝试制作一个简单的二维游戏。我在使用cocoa作为所有窗口和objective-c语言。
另外,我想知道的另一件事是:如果我制作了一个简单的游戏,将像素映射到单位,那么设置它使原点位于左上角(个人偏好),还是会遇到其他问题(例如文本呈现)?
谢谢。