白い背景のOpen GL ESに色付きのテクスチャブラシを表示するにはどうすればよいですか?
質問
OpenGLESを使用して、白い背景に、選択した色のテクスチャブラシで描画したい。
ビットマップイメージがあり、CGを使用してロードし、テクスチャに変換します。このビットマップはほとんどが黒ですが、「ブラシ」として使用したい中心に白い円があります。言い換えれば、最終的な合成では黒い部分を消し、glColorを使用して設定した色を白い部分に反映させます。
最高の不透明な明るい色を設定した後、ブレンドパラメータ(GL_SRC_ALPHA、GL_ONE)を使用すると、灰色の背景に色が薄くなります(純粋な白い背景ではありません)。しかし、背景を真っ白に設定すると、線は見えません。
少なくとも現在の状況では、元のテクスチャの黒いエッジは表示されません。私が試みている他のほとんどのブレンドの組み合わせでは、グレーでも何も表示されないか、黒いエッジを含むブラシ全体が表示されますが、これは良くありません。
テクスチャやGLの状態を設定して、黒いテクスチャのエッジをまったく表示せずに明るい色を真っ白に表示する方法を説明してくれる人はいますか?これは初心者の質問かもしれませんが、私はブレンド計算を試しましたが、色がどのようにまとめられているのかまだ理解していません。
これは、ブラシとして使用している画像です。
代替テキストhttp://www.coldcoffeeandjuice.com/OpaqueBrush.png
背景が灰色で、glColor4fが(1、0、0、1)に設定されている場合(純粋な赤など)、ブラシは連続したGL_POINTの束で使用されます。これの良い点は、ブラシ画像の白い部分だけが赤を表示するということです-そうです。悪い部分は、背景(?)および/またはブラシの白(?)とブレンドされているため、純粋で明るくしたい赤が薄いため、背景が純粋な白である場合は完全に洗い流されます。これは、上記のようにブレンドパラメーターを使用します(src_alpha、1)。
(ソース: coldcoffeeandjuice.com )
これは、純粋な赤色(ペイントブラシに感謝)を与えられた場合に見たいものです:
(ソース: coldcoffeeandjuice.com )
誰かが私が間違っていることを理解するのを助けることができますか?
ありがとう!
解決
わかりましたので、「ペイント」しようとしています。ブラシ形状のマスクを使用して、背景に特定の色(この場合は「赤」)を追加します。
"ペイント"のレンダリングを開始する前に、以下を実行する必要があります:
-
最初に、ブラシの形状に対応するアルファチャンネルがあることを確認します。つまり、アルファチャンネルは、ポーズをとったブラシ画像に似ているはずです。
-
これらの状態を設定してレンダリングします(wikiマークアップを回避するためにスペースに注意してください):
// Make the current material colour track the current color glEnable( GL_COLOR_MATERIAL ); // Multiply the texture colour by the material colour. glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); // Alpha blend each "dab" of paint onto background glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
http://www.khronos.org/opengles/documentation /opengles1_0/html/glTexEnv.html