OpenGL RGBA テクスチャがあり、フレームバッファ オブジェクトを使用して、別の RGBA テクスチャをそれにブリットします。問題は、結果のブリットで通常のブレンド関数を使用する
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA),
と、デスティネーション テクスチャ アルファが変更され、以前のアルファが 1 だった場所がわずかに透明になることです。 on RGB 値は および とまったく同じである必要がGL_SRC_ALPHA
ありGL_ONE_MINUS_SRC_ALPHA
ます。したがって、ブレンド係数関数は (As,As,As,0) および (1-As,1-As,1-As,1) である必要があります。どうすればそれを達成できますか?
4245 次
2 に答える
7
RGB とアルファのブレンド モードを異なる方程式に設定できます。
void glBlendFuncSeparate(
GLenum srcRGB,
GLenum dstRGB,
GLenum srcAlpha,
GLenum dstAlpha);
あなたの場合、次の列挙型を使用したい:
glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ZERO, GL_ONE);
glBlendFuncSeparate 関数を拡張機能としてインポートする必要がある場合があることに注意してください。そうしても安全です。この機能は非常に長い間使用されています。これは OpenGL 1.4 の一部です
同じことを行う別の方法は、glColorMask を使用してアルファ チャネルへの書き込みを無効にすることです。
void glColorMask( GLboolean red,
GLboolean green,
GLboolean blue,
GLboolean alpha )
OpenGL ドライバーは最も一般的に使用される関数を最適化し、glColorMask はめったに使用されない OpenGL 関数の 1 つであるため、glBlendFuncSeparate よりもはるかに遅くなる可能性があります。
運が悪ければ、変わった関数を呼び出してソフトウェア レンダリング エミュレーションを行うことになるかもしれません :-)
于 2008-09-28T16:03:13.533 に答える
1
glColorMask ()を使用できますか? 4 つのカラー コンポーネントのそれぞれへの書き込みを有効/無効にできます。
于 2008-09-28T16:00:21.807 に答える