Когда я загружаю структуры из изображений обычно, они перевернуты из-за системы координат OpenGL. Каков был бы лучший способ зеркально отразить их?
Это - метод, который я использую для загрузки структур 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, но позже я хочу попытаться делать простую 2-ю игру. Я использую Какао для всей работы с окнами и Objective C как язык.
Кроме того, другая вещь я задавался вопросом о: Если бы я сделал простую игру с пикселями отображенной на единицах, то это было бы в порядке для установки его так, чтобы источник был в верхнем левом углу (персональное предпочтение), или я работал бы в к проблемам с другими вещами (например, текстовый рендеринг)?
Спасибо.
Джордан Льюис указал , что CGContextDrawImage рисует изображение вверх ногами при передаче UIImage.CGImage . Там я нашел быстрое и простое решение: перед вызовом CGContextDrawImage,
CGContextTranslateCTM(context, 0, height);
CGContextScaleCTM(context, 1.0f, -1.0f);
Выполняет работу отлично.
Любой из них:
Отразить текстуру во время загрузки текстуры,
ИЛИ перевернуть координаты текстуры модели во время загрузки модели
ИЛИ установите матрицу текстуры на отражение y (glMatrixMode (GL_TEXTURE)) во время рендеринга.
И еще кое-что, о чем я подумал: если бы я сделал простую игру с пикселями, сопоставленными с юнитами, можно было бы настроить ее так, чтобы начало координат находилось в верхнем левом углу (личные предпочтения), или Могу ли я столкнуться с проблемами в других вещах (например, рендеринг текста)?
Зависит от того, как вы собираетесь рендерить текст.