2010-02-14 7 views
0

Ok, ce que j'essaie de faire, c'est de charger une image en tant que ressource unique et d'en sauvegarder différentes parties sous forme de textures différentes (en découpant l'image en plus petits carrés puis en économisant les séparément).Problèmes de chargeur iPhone OpenGL Texture

Pour mon jeu, le simple fait de mapper différentes sections de l'image originale à mes formes ne fonctionnera pas et le fait d'avoir chaque 'tuile' comme texture distincte serait génial.

Voici le code que j'utilise pour mon chargeur de texture. J'ai essayé de jouer avec la largeur et la hauteur de la texture chargée mais obtenant des résultats étranges.

Toutes les suggestions seraient grandement appréciées.

Merci

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]; 
+0

@ simo311: J'ai reformaté votre code pour l'afficher sans barre de défilement horizontale. N'hésitez pas à annuler mes modifications si vous n'êtes pas d'accord. –

Répondre

0

Ok, juste au cas où quelqu'un veut atteindre cet objectif, je compris. Tout ce que vous devez faire est de modifier la ligne CGContextDrawImage et modifier les paramètres de largeur et de hauteur.

Cela entraîne le chargement de la texture entière mais dessine uniquement la zone spécifiée sur cette ligne.

Fondamentalement,

CGContextDrawImage (contexte, CGRectMake (0, 0, 2 * largeur, hauteur * 2), image.CGImage);

dessine 1/4 de l'image (sa hauteur et sa largeur sont doublées au-delà de la taille des textures).

:)