Когда я загружаю текстуры из изображений нормально, они переворачиваются из-за системы координат OpenGL. Как лучше всего перевернуть их?
- glScalef (1,0f, -1,0f, 1,0f);
- отображение координат Y текстур в обратном порядке
- вертикальное перелистывание файлов изображений вручную (в фотошопе)
- переворачивать их программно после загрузки (не знаю как)
Это метод, который я использую для загрузки png-текстур в моем файле 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);
}
Где TextureImage - это структура, имеющая данные о высоте, ширине и пустоте *.
Сейчас я просто играю с OpenGL, но позже я хочу попробовать сделать простую 2d игру. Я использую Какао для всех окон и Objective-C в качестве языка.
Кроме того, еще одна вещь, которая меня интересует: если бы я сделал простую игру с пикселями, сопоставленными с единицами измерения, было бы хорошо настроить ее так, чтобы источник находился в верхнем левом углу (личные предпочтения), или я столкнулся бы с проблемами с другими вещами (например, рендеринг текста)?
Спасибо.