>Isleさん
ありがとうございます。
>透過無しで画像を表示することはできているのでしょうか。
はい。透過pngなら透過するところまではわかっています。…といっても上記サイトのプロジェクトのコードをマネして書いたものなのですが…
コード:
CGImageRef image=[UIImage imageNamed: filename].CGImage;
if(!image)
{
NSLog(@"image false");
return -1;
}
size_t width=CGImageGetWidth(image);
size_t height=CGImageGetHeight(image);
GLubyte* imageData=(GLubyte*)malloc(width*height*4);
CGContextDrawImage(imageContext,CGRectMake(0,0,(CGFloat)width,(CGFloat)height),image);
CGContextRelease(imageCongext);
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, imageData);
free(imageData);
//textureにテクスチャの情報が入った。
次に描画
コード:
int red=255,green=255,blue=255,alpha=255;
const GLubyte squareColors[] = {
red, green, blue ,alpha,
red, green, blue ,alpha,
red, green, blue ,alpha,
red, green, blue ,alpha,
};//各頂点の色
const GLfloat texCoords[] = {
left, bottom,
right, bottom,
left, top,
right, top,
};//テクスチャの頂点
//テクスチャ機能を有効にし、描画に使用するテクスチャを指定します
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture);
glVertexPointer(2, GL_FLOAT, 0, squareVertices);
glEnableClientState(GL_VERTEX_ARRAY);
glColorPointer(4, GL_UNSIGNED_BYTE, 0, squareColors);
glEnableClientState(GL_COLOR_ARRAY);
glTexCoordPointer(2, GL_FLOAT, 0, texCoords);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
//テクスチャ機能を無効にします
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisable(GL_TEXTURE_2D);
抜けがあったらすみません。
もちろん関数化してあり、描画の前後には
glEnable(GL_BLEND)とglDisable(GL_BLEND)があります。
>画像ファイルから画素を読み込む際に、特定の色であれば透過するようにα値を設定すれば良い
openGLに関しては文献が古かったり少なかったりで調べきれていません…申し訳ないです。
今持っているテキストには画素の読み込みについては、おおざっぱにしか書かれていないので正直よくわかっていません。
何か関数を追加する必要があるのでしょうか。