テクスチャスプライト/アトラスを使用して、ゲーム内の一部のキャラクターをアニメートしたいと思います。
基本的な考え方は、常に大きなアトラス画像の一部のみをロードすることでした。この部分は、現在キャラクターテクスチャとして使用する必要があります。これは可能ですか?それとも私の思考プロセスは間違っていますか?
以下は、テクスチャ全体をロードするための私のコードです。row引数とcol引数を使用して、アトラスのどの部分を現在テクスチャとして使用するかを指定します。
- (GLuint) loadTexture:(NSString*)fileName row:(int)row col:(int)col
{
NSLog(@"Loading image %@", fileName);
NSLog(@"Texture Part: %d, %d", row, col);
CGImageRef spriteImage = [UIImage imageNamed:fileName].CGImage;
if (!spriteImage) {
NSLog(@"Failed to load image %@", fileName);
exit(1);
}
size_t img_width = CGImageGetWidth(spriteImage);
size_t img_height = CGImageGetHeight(spriteImage);
GLubyte * spriteData = (GLubyte *) calloc(img_width * img_height * 4, sizeof(GLubyte));
CGContextRef spriteContext = CGBitmapContextCreate(spriteData, img_width, img_height, 8, img_width*4,
CGImageGetColorSpace(spriteImage), kCGImageAlphaPremultipliedLast);
CGContextDrawImage(spriteContext, CGRectMake(0, 0, img_width, img_height), spriteImage);
CGContextRelease(spriteContext);
GLuint texName;
glGenTextures(1, &texName);
glBindTexture(GL_TEXTURE_2D, texName);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, img_width, img_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, spriteData);
free(spriteData);
NSLog(@"Texture successfully loaded!");
return texName;
}
現在、このコードでロードできるのは画像全体のみであるため、元の画像のみを使用でき、アニメーションの1つのステップを表示するためにその一部を使用することはできません。