私はOpenGL ES 2.0を学んでいます。その仕組みを理解するために、アプリケーションを作成したいと思います。 このアプリには、ユーザーが画像に適用できるフィルタのセットがあります(私は知っていますが、新しいものはありません:P)。このフィルタのOpenGL ES 2.0での画像とマスク
一つは、2枚の画像とマスクを取り、それは現時点では
を(より良い私が取得したいかを説明するためにここに画像)マスクを介してそれらを示す2枚の画像をミックス私は本当に混乱しており、どこからこの効果を生み出すのか分かりません。 私は複数のテクスチャと複数のFrameBuffersで作業する必要があるか、単一のシェーダでしか作業できないことは理解できません。
このプロジェクトで私を助けるヒントはありますか?
EDITは--------
私はこの解決策を見つけたが、私は代わりに、円のマスクラインとして使用する場合、結果はラインが回転している場合は特に、本当に「汚い」です。
precision highp float;
varying vec4 FragColor;
varying highp vec2 TexCoordOut;
uniform sampler2D textureA;
uniform sampler2D textureB;
uniform sampler2D mask;
void main(void){
vec4 mask_color = texture2D(mask, TexCoordOut);
if (mask_color.a > 0.0){
gl_FragColor = texture2D(textureA, TexCoordOut);
}else {
gl_FragColor = texture2D(textureB, TexCoordOut);
}
}
ステンシルバッファまたはブレンドを使用する方が良いでしょうか?
ところで、アルファ( 'mask_color.a')チャンネルをマスクとして使う必要はありません。あなたは他の 'r'、' g'、 'b'チャンネルを使うことができます。この方法でアルファチャンネルなしのマスクテクスチャを使ってGPUメモリを節約します。 – keaukraine
@MatterGoalあなたはこの質問に答えることができるかもしれません。http://stackoverflow.com/questions/24486729/uiimage-masking-with-gesture –