glTexImage2Dによる文字列描画
Posted: 2011年9月09日(金) 18:32
FreeType2で生成した文字情報をOpenGL ES 1.1を使用して描画しようとしています。
FreeType2による文字列データ(ビットマップ情報)は以下の通りで、256階調のグレースケールになっています。
(「a」という文字を生成)
0000003b8ac0e5f8fcedc26e07000000
0020c9ffffffffffffffffffcc0a0000
0053ffffffffffffffffffffff800000
0002d0fff0a97e6e76cbffffffd00000
0000144a0a0000000040fffffff40000
00000000000000000038ffffffff0000
000000001467abd5effcffffffff0000
0000027cf3ffffffffffffffffff0000
00009effffffffffffffffffffff0000
004cffffffffffc48790ffffffff0000
00b3fffffff240000038ffffffff0000
00e9ffffff7700000038ffffffff0000
00fcffffff3f00000053ffffffff0600
00f0ffffff59000008cbffffffff1600
00bbffffffe0767ed5ffffffffff3600
0050ffffffffffffffffffffffff7000
000093fffffffffffffd7afaffffd500
00000051bbeefae4a5320077f4ffbe00
width=256、height=64の指定で、上記情報以外は全て0x00で埋まっています。
上記情報を以下の処理で描画したところ、赤で塗り潰された、width=256、height=64の四角が描画されてしまいます。
(imageに上記情報が入っています)
↓プログラム
float varray[][3] =
{
{-w, -h, 0},
{ w, -h, 0},
{-w, h, 0},
{ w, h, 0},
};
float tarray[][2] =
{
{ 0.0f, 1.0f},
{ 1.0f, 1.0f},
{ 0.0f, 0.0f},
{ 1.0f, 0.0f},
};
glGenTextures (1, (GLuint *) &texture_id);
glBindTexture (GL_TEXTURE_2D, texture_id);
glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D (GL_TEXTURE_2D, 0, GL_LUMINANCE, 256, 64, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, image);
glColor4f (FLOAT_COLOR (255),FLOAT_COLOR (0),FLOAT_COLOR (0),FLOAT_COLOR (255));
glBindTexture (GL_TEXTURE_2D, texture_id);
glVertexPointer (3, GL_FLOAT, 0, varray);
glTexCoordPointer(2, GL_FLOAT, 0, tarray);
glDrawArrays (GL_TRIANGLE_STRIP, 0, 4);
↑プログラム
0x00で埋まっているところは透過され赤色で「a」が描画されると思っていたのですが、これは間違っているのでしょうか?
どうしたら、「a」が描画されるようになるのでしょうか?
当方、OpenGL ES 1.1を使用するのは今回が初めての初心者です。
何卒ご教示のほどよろしくお願い致します。
情報不足等ありましたら、申し訳ありません。
FreeType2による文字列データ(ビットマップ情報)は以下の通りで、256階調のグレースケールになっています。
(「a」という文字を生成)
0000003b8ac0e5f8fcedc26e07000000
0020c9ffffffffffffffffffcc0a0000
0053ffffffffffffffffffffff800000
0002d0fff0a97e6e76cbffffffd00000
0000144a0a0000000040fffffff40000
00000000000000000038ffffffff0000
000000001467abd5effcffffffff0000
0000027cf3ffffffffffffffffff0000
00009effffffffffffffffffffff0000
004cffffffffffc48790ffffffff0000
00b3fffffff240000038ffffffff0000
00e9ffffff7700000038ffffffff0000
00fcffffff3f00000053ffffffff0600
00f0ffffff59000008cbffffffff1600
00bbffffffe0767ed5ffffffffff3600
0050ffffffffffffffffffffffff7000
000093fffffffffffffd7afaffffd500
00000051bbeefae4a5320077f4ffbe00
width=256、height=64の指定で、上記情報以外は全て0x00で埋まっています。
上記情報を以下の処理で描画したところ、赤で塗り潰された、width=256、height=64の四角が描画されてしまいます。
(imageに上記情報が入っています)
↓プログラム
float varray[][3] =
{
{-w, -h, 0},
{ w, -h, 0},
{-w, h, 0},
{ w, h, 0},
};
float tarray[][2] =
{
{ 0.0f, 1.0f},
{ 1.0f, 1.0f},
{ 0.0f, 0.0f},
{ 1.0f, 0.0f},
};
glGenTextures (1, (GLuint *) &texture_id);
glBindTexture (GL_TEXTURE_2D, texture_id);
glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D (GL_TEXTURE_2D, 0, GL_LUMINANCE, 256, 64, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, image);
glColor4f (FLOAT_COLOR (255),FLOAT_COLOR (0),FLOAT_COLOR (0),FLOAT_COLOR (255));
glBindTexture (GL_TEXTURE_2D, texture_id);
glVertexPointer (3, GL_FLOAT, 0, varray);
glTexCoordPointer(2, GL_FLOAT, 0, tarray);
glDrawArrays (GL_TRIANGLE_STRIP, 0, 4);
↑プログラム
0x00で埋まっているところは透過され赤色で「a」が描画されると思っていたのですが、これは間違っているのでしょうか?
どうしたら、「a」が描画されるようになるのでしょうか?
当方、OpenGL ES 1.1を使用するのは今回が初めての初心者です。
何卒ご教示のほどよろしくお願い致します。
情報不足等ありましたら、申し訳ありません。