2

そのため、私のアプリケーションではほとんどの場合、レンダリングに 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 テクスチャとして再パックすることになると思います。

4

1 に答える 1

1

データを処理する方法は 2 つあります。したがって、2 つの異なるシェーダーがあります。それらを切り替えます。シェーダーは何が起こるかを反映します。

glTexEnv、ライティングなどの設定ごとに古い非推奨の固定関数パイプラインを使用すると、特定のシェーダーがその場で作成されます。

シェーダーの切り替えは、glUseProgramm を呼び出すのと同じくらい簡単です

于 2012-10-28T15:42:55.253 に答える