2011-01-22 9 views
7

私はiPhoneゲームを開発しています。私はバックグラウンドに描画するために以下のソースイメージを持っています。ソースイメージにはアルファ0x00とグラデーションがあり、背景のアルファは0xffです。ソースイメージを背景に描画すると、結果イメージを見ることができるように黒色になります。 OpenGL ES glBlendFunc(GL_SRC_ALPHA、GL_ONE_MINUS_SRC_ALPHA)メソッドを使用しています。私はすべての可能な議論を変えましたが、動かされないたびに変わりました。iPhoneのOpenGLのアルファブレンディング。私は端に黒い色があります

なぜソースイメージの端に黒色が表示されますか?何が問題ですか? iPhoneのすべてのゲームでグラデーションを使用しているわけではありませんか?

グラデーションなしでソースイメージを作成する必要はありますか?

解決策を知っている人はいますか?

ソース画像:

alt text

は結果画像:

alt text

答えて

14

あなたのイメージは、プリマルチアルファを持っていますか?そして、あなたは

glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); 

Hereを使用しなければならないことは、それが何であるかのいくつかの説明です。

注:私はいくつかの研究をした後に答えを書き換えました。上記の記事rotoglupには、何が起こっているかについてのいくつかの洞察があります。私はまた、他の人がコードで使っているものを見ようとしましたが、この式が最もよく使われているようです。アルファブレンディングのような3Dグラフィックスのような基本的なことは、どれほど議論の余地があり、誰もが自らのソリューションを作り直すことが大変驚きです。

+0

これは一般的なアルファの2倍の乗算のようです。 – v01d

+0

ONE、ONE_MINUS_SRC_ALPHAにする必要はありませんか? – rotoglup

+1

ここに別の説明の資料があります:http://home.comcast.net/~tom_forsyth/blog.wiki.html#%5B%5BPremultiplied%20alpha%5D%5D – rotoglup

0

描画しているビューが不透明であるかどうかを確認するだけです。不透明なプロパティをfalseに設定してください

+0

これはOpenGLでUIKitではありません。 – v01d

0

これは、クランピング方法とともに、拡大縮小フィルターと拡大フィルターのglTexParameteriを正しく設定していない場合に発生します。 Adam Redwoodのコメントhereを参照してください。 2のべき乗のテクスチャ、テクスチャの境界などの問題も同様に作用することに注意してください。

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 
関連する問題