2

ここで説明されているように、いくつかの画像を単一の画像にブレンドする必要があります: OpenGL - mask with multiple textures
そこで提案されている解決策を使用しましたが、方法に問題がありglBlendFuncSeparateます。

この方法は後のopenGLバージョンで導入されたことが判明し、私のgl.hファイルによると、私が使用しているバージョンは1です。
多くの検索と読み取りの後、これは私が作業しなければならないものであり、単にアップグレードできないことに気付きました私のopenGLバージョン。

先に進み、ダウンロードしましGLEWた。をVS10 プロジェクト
に追加glew.hし、定義し、最終的に について文句を言わずにコンパイルしましたが、プログラムを実行すると、メソッドを呼び出そうとするとクラッシュし、NULL を指していると推測し、それが実行されているときにクラッシュします.glew.cGLEW_BUILDglBlendFuncSeparateAccess Violation

私はこれを読んで検索し続けましたが、私が理解していることから、それを機能させるには OpenGl 拡張機能を使用する必要があります。Windows での OpenGL 拡張機能
の使用に書かれていることが正しい場合、何かが欠けています。 「グラフィックカード用の最新のドライバーとSDKをダウンロードしてインストール」し、それをコンパイルします。それが私のマシンで実行されたとしても、他の誰かのマシンでクラッシュしないという保証はありません。 、彼らは同じことをしなかったかもしれないので。

2 つの質問があります。

  1. ここで何か不足していますか?このプロセス全体が複雑すぎて、環境に依存しているようです。
  2. glBlendFuncSeparateこの種のシナリオで使用するための代替手段はありますか?
4

1 に答える 1

2

glBlendFuncSeparate(GL_ZERO, GL_ONE, GL_SRC_COLOR, GL_ZERO); は必要ありません。OpenGL - mask with multiple textures で説明されているトリックを使用するには。はい、前の例で説明したように、アルファ チャネルに直接色を追加することはできませんが、少し注意が必要です。

マスクの書き込み中は、アルファを除くすべてのカラー チャネルの書き込みを無効にします。

glColorMask(false, false, false, true);

背景のアルファチャンネルでマスクのアルファを乗算できるようにします。

glBelndFunc(GL_ZERO, GL_SRC_ALPHA);

ビットマスクを書き込んだ後、glColorMask を元に戻すことを忘れないでください。

glColorMask(true, true, true, true);

//------------------------------------------------ -------------------------------------------------- ----------------------

はい、アルファ チャネルの情報を含むマスクが必要です。

1)GIMPで実行できます(非常に単純ですが、GIMPの知識が必要です)。

2) マスク テクスチャを作成する前に、カラー情報をアルファ チャネルにプッシュするための独自のルートティンを作成できます (非常に単純で、数行のコードしかありません)。

3) または、マスク テクスチャに glTexImage2D の GL_ALPHA "format" 属性を使用します。このフラグは、ビットマップ カラーをテクスチャ アルファ チャネルに書き込むだけです。

于 2014-10-30T13:17:22.383 に答える