Проблемы с загрузчиком текстур iPhone OpenGL

Хорошо, я пытаюсь загрузить изображение как единый ресурс, а затем сохранить разные его части в виде нескольких разных текстур (в основном разбивая изображение на более мелкие квадраты, а затем сохраняя их отдельно).

Для моей игры простое сопоставление разных частей исходного изображения с моими фигурами не сработает, и возможность иметь каждую «плитку» как отдельную текстуру было бы здорово.

Ниже приведен код, который я использую для загрузчика текстур. Я пробовал возиться с шириной и высотой загружаемой текстуры, но получал некоторые странные результаты.

Любые предложения будут высоко ценится.

Спасибо

glBindTexture(GL_TEXTURE_2D, texture[0]);   

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);

NSString *path =
      [[NSBundle mainBundle] pathForResource:@"checkerplate" ofType:@"png"];
NSData *texData = [[NSData alloc] initWithContentsOfFile:path];
UIImage *image = [[UIImage alloc] initWithData:texData];

GLuint width = CGImageGetWidth(image.CGImage);
GLuint height = CGImageGetHeight(image.CGImage);    
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
void *imageData = malloc( height * width * 4 );
CGContextRef context = CGBitmapContextCreate( 
      imageData, width, height, 8, 4 * width, colorSpace,
      kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big );
CGColorSpaceRelease( colorSpace );
CGContextClearRect( context, CGRectMake( 0, 0, width, height ) );
CGContextTranslateCTM( context, 0, height - height );
CGContextDrawImage( context, CGRectMake( 0, 0, width, height ), image.CGImage );

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA,
      GL_UNSIGNED_BYTE, imageData);

CGContextRelease(context);

free(imageData);
[image release];
[texData release];

person Simo    schedule 14.02.2010    source источник
comment
@ simo311: я переформатировал ваш код для отображения без горизонтальной полосы прокрутки. Не стесняйтесь откатывать мои изменения, если вы не согласны.   -  person Peter Lang    schedule 15.02.2010


Ответы (1)


Хорошо, на всякий случай, если кто-то хочет этого добиться, я понял это. Все, что вам нужно сделать, это изменить строку CGContextDrawImage и изменить параметры ширины и высоты.

Это приводит к загрузке всей текстуры, но затем рисует только область, указанную в этой строке.

В основном,

CGContextDrawImage (контекст, CGRectMake (0, 0, ширина * 2, высота * 2), image.CGImage);

будет рисовать 1/4 изображения (так как его высота и ширина увеличиваются вдвое по сравнению с размером текстуры).

:)

person Simo    schedule 19.02.2010