文字列を描画する手順としては、FreeType2を使用して256階調のグレースケール情報に文字列を展開
その文字列情報をテクスチャに変換し、描画するという処理にしています。
その際、glTexImage2Dの制約で幅、高さを2のべき乗にする処理を入れています。
展開された文字列情報が幅80、高さ40の場合、幅128、高さ64を指定しglTexImage2Dを実行。
文字列情報は拡大ではなく、広げた分を0x00とし透過されるようにしています。
描画領域のサイズ(下記プログラムのvallayの設定)を幅80、高さ40にすると、テクスチャが縮小表示されてしまうため、描画領域も幅128、高さ64としています。(幅80、高さ40の範囲外の部分は透過されるため問題ないと思っていました)
ところが、他のオブジェクトと重ねて描画したところ、透過されずにテキスト枠が描画されてしまいました。
本来の描画領域である幅80、高さ40の部分については透過されているのですが、はみ出た個所が透過されません。
オブジェクト間の透過処理については、こちらでは手が出せないところで組まれており、どうやら本来の描画領域に対してのみ透過処理をしているようなのです。
そこで、はみ出た領域については、マスクなどの処理を行うことで回避できないかと検討しているのですが、実現できるのか、実現出来る場合どのように実現するのかといったところが分らず困窮しているところです。
文字列描画のプログラムは以下となっています。(幅80、高さ40で描画)
文字列情報はimageに格納されています。
float varray[][3] =
{
{-64, -32, 0},
{ 64, -32, 0},
{-64, 32, 0},
{ 64, 32, 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_ALPHA, 128, 64, 0, GL_ALPHA, 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);
1.はみ出た領域(描画情報128×64に対し描画したい領域は80×40)をマスクして描画されないようにすることは可能か?
2.1が可能な場合、どのように実現するのか?
3.1が不可能な場合、描画領域も80×40としテクスチャを縮小させずに描画させることが可能か?
4.3が可能な場合、どのように実現するのか?
当方、OpenGL ES 1.1を使用するのは今回が初めての初心者です。
何卒ご教示のほどよろしくお願い致します。
情報不足等ありましたら、申し訳ありません。