私が持っているのは、このブレンド機能をテストするためにレンダリングされている3x3グリッドの9つの正方形のセットです。これがアイデアです。
パス1:
- バインドtexture1(ダート)
- tex1=Dirtを使用して正方形をレンダリングします
パス2:
- バインドtexture2(文字)
- tex2=文字Wを使用して同じ正方形をレンダリングします
これはゲーム内エディター用です。入力時にテキストアトラスから文字の色を変更できるようにしたいと考えています。シェーダーは、テクスチャからフラグメントのアルファ値をチェックすることになっています。0に等しくないもの(つまり、Visible)は、属性としてシェーダーに渡される目的の色に変更する必要があります。
//Draw all Squares
glBindTexture(GL_TEXTURE_2D, textureID1); //Dirt Texture
for (int Index = 0; Index < 9; Index++)
{
//Pass in Vertex Positions...
//Pass in UV's...
glDrawArrays(GL_TRIANGLES, 0, 6); // From index 0 to 6 -> 2 triangle
}
//Redraw Squares with letter texture bound.
glBindTexture(GL_TEXTURE_2D, textureID2); //Letter Texture
glVertexAttrib3f(2,255,0,0); //Desired Color of letter, passed to shaders.
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER,0.05f); //Anything with alpha < 0.05 is discarded.
//Draw all Squares
for (int Index = 0; Index < 9; Index++)
{
//Pass in Vertex Positions...
//Pass in UV's...
glDrawArrays(GL_TRIANGLES, 0, 6); // From index 0 to 6 -> 2 triangle
}
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
glDisable(GL_ALPHA_TEST);
//Draw blue vertex dots...etc...
これは、ソースイメージと、わずかに異なる2つのフラグメントシェーダーの出力を示す画像です。望ましい結果とともに。
テクスチャがロードされ、両方にアルファチャネル(GL_BGRA、Targas)があります。MIN /MAGFILTERSとしてGL_NEARESTを使用しています。
奇妙なことに、このシェーダーは、レターテクスチャのアルファチャネルで99%の白(つまり254)を使用すると機能し、フルホワイト(つまり255)を使用すると失敗します。
GL_BLENDを有効にして、さまざまなBlendFuncを使用してみましたが、機能しないようです。
質問はそうだと思います。マルチテクスチャシェーダーを使用せず、FBOにレンダリングせずに、これはこの種のブレンディングを行う正しい方法ですか?