フレーム バッファに一定の色を描画し、RGBA テクスチャのアルファ チャネルを使用してブレンドしようとしています。glBlendFunc と glBlendColor を見てきましたが、テクスチャから RGB 値を無視する方法がわかりません。自分でアルファ値を引き出して、GL_ALPHA で 2 番目のテクスチャを作成する必要があると考えています。これを行うより良い方法はありますか?
ありがとう!
フレーム バッファに一定の色を描画し、RGBA テクスチャのアルファ チャネルを使用してブレンドしようとしています。glBlendFunc と glBlendColor を見てきましたが、テクスチャから RGB 値を無視する方法がわかりません。自分でアルファ値を引き出して、GL_ALPHA で 2 番目のテクスチャを作成する必要があると考えています。これを行うより良い方法はありますか?
ありがとう!
私は色分けされたピッキングを使用しています。これは、テクスチャクワッドの透明な領域が選択されないように使用しているコードです。
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_TEXTURE_2D);
glEnable(GL_ALPHA_TEST);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA);
glAlphaFunc(GL_GREATER, 0.5f);
glColor3ub(myColor[0], myColor[1], myColor[2]);
drawTexturedQuad();
基本的に、テクスチャを適用する前の RGB をそのままにして (これは myColor になります)、テクスチャから ALPHA を取得したいと言っています。
glBlendFunc を使用するGL_SRC_ALPHA
とGL_DST_ALPHA
、テクスチャのアルファ チャネルを選択するために使用できます (どれを選択するかは、ブレンド操作とテクスチャによって異なります)。より詳細なブレンドのチュートリアルについては、次を参照してください。
関連する OpenGL ドキュメント: