そのため、私のアプリケーションではほとんどの場合、レンダリングに rgba テクスチャを使用しますが、テキストのレンダリングなどにアルファ マスクを使用する場合もあります。
フラグメント シェーダーの出力を、指定された座標のテクスチャ サンプラーの値に、渡すカラー ユニフォームを掛けたものにしたいと考えています。問題は、両方のケースを処理する単純なソリューションが見つからないことです。
したがって、rgba テクスチャの場合、これにより望ましい結果が得られます。
gl_FragColor = texture2D(diffuseTexture, varTexcoord.st, 0.0) * color;
ただし、アルファ テクスチャの場合、出力は常に黒です。私は、テクスチャ サンプラーがアルファ テクスチャのすべてのピクセルを rgba(0, 0, 0, alpha) として扱うと想定しており、rgba(1, 1, 1, alpha) として扱いたいと考えています。これにより、アルファ テクスチャで目的の結果を得ることができます。
gl_FragColor = texture2D(diffuseTexture, varTexcoord.st, 0.0).w * color;
しかし明らかに、これは rgba テクスチャを壊します。
私は GLSL にかなり慣れていないので、両方のケースを処理する良い方法があるかどうか、または 2 つの異なるシェーダーを使用する必要があるかどうか、またはすべての aplha テクスチャを rgba に変換する必要があるかどうか疑問に思っています。
編集:
アセットをロードするときに、アルファ テクスチャを GL_LUMINANCE_ALPHA テクスチャとして再パックすることになると思います。