Androidアプリ開発 OpenGL アルファブレンド 合成方法

アルファブレンドは「わかりにくい」のではあるが、いろいろな効果を出すことができる。glBlendFuncで指定する引数の組み合わせで、ブレンド方法を変化させることができる。理解を深めるため、以下の3パターンでブレンドさせてみることにした。

if ( blendMode == 0 ){
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
}
else if ( blendMode == 1 ){
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE);
}
else if ( blendMode == 2 ){
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_SRC_COLOR);
}

blendModeはクラスのフィールドで、ロングタップすると切り替わるようにした。これで、キャプチャしたのが、以下の動画である。

最初のブレンド方法は、GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA
このブレンド方法はいたって普通の合成となる。
ドロイド君の画像は、アルファ値が0か1のどちらかしかないようである(半透明な部分がない)。半透明な部分がある画像でやったらもっと面白かったかも知れない。
次のブレンド方法は、GL_SRC_ALPHA, GL_ONE
この方法だと、重なっている部分が白く発光した感じになる。
最後のブレンド方法は、GL_SRC_ALPHA, GL_SRC_COLOR
この方法だと、透けている感じになるものの、アルファ値が0の部分は透けない。発光した感じにはならない。
うーん、GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA以外の使い道ってあるのか...
GL_SRC_ALPHA, GL_ONEは、発光させたいときに使うらしいが...
やっぱり難しい。

投稿者プロフィール

asai
asai
システムエンジニア
喋れる言語:日本語、C言語、SQL、JavaScript