構文エラーはないと思います。OpenGL を使用してテクスチャ付きクワッドでアルファがどのように行われるかを理解するのに問題があるだけです。(opengl 4.2であるcentos 6.3の下のmesa 9.0)
glTexImage でアップロードされたフォント フェイスがあります (GL_ALPHA、GL_RED、現在 GL_RGBA を試しました)。ピクセルをいじって手動で設定したので、アルファチャンネルが文字に設定され、背景に設定されていないことはかなり確信しています)。
したがって、明確にするために、TexImage には、文字ピクセルに赤の 0xff0000、背景ピクセルに黒の 0x000000 が含まれ、アルファは赤のピクセルで 0xff に設定され、それ以外の場合は 0x00 に設定されます。
やった:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_FALSE );
前
glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA,
face->glyph->bitmap.width, face->glyph->bitmap.rows,
0, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV, new_buffer );
グリフを表示する場合:
glBindTexture(GL_TEXTURE_2D, ascii_textures[100] );
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
//glColor4f(0.0f, 0.0f, 0.0f, 0.5f);
// Then draw the box
glBegin(GL_QUADS);
glTexCoord2i( 0, 0 );
glVertex2f( ... // bottom left
glTexCoord2i( 0, 1 );
glVertex2f( ... // top left
glTexCoord2i( 1, 1 );
glVertex2f( ... // top right
glTexCoord2i( 1, 0 );
glVertex2f( ... // bottom right
glEnd();
私はこれを取得します(私はビデオの上に赤い「d」を描いています):
glColor 行のコメントを外すと、次のようになります。
テクスチャを使用しない場合、半透明の暗いボックスが得られるので、明らかにブレンディングが機能しています。
OpenGL は、テクスチャからではなく、glColor4f ステートメントからアルファ値を取得しているようです。
とにかく、色ではなく質感に見えるようにするには?
私が実際に行っているのは、テクスチャとしてプリロードしたグリフをマスクまたはクリップすることです。そのため、他の方法でこれを行うことは歓迎されます (ただし、複雑な Unicode グリフが必要になるため、おそらく過剰なフォントではありません)。