中央の黒の完全に不透明な色から端の完全に透明な色になる放射状グラデーション テクスチャ (RGBA) があります。
GLKit を使用する最近の OpenGL テンプレートを使用して、iOS プロジェクトをセットアップしました。テクスチャ機能を追加し、setupGL メソッドに次のコードを設定しました。
glEnable(GL_DEPTH_TEST);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
これらのテクスチャの 2 つ (それぞれに個別の z があります) を白い背景のオルソ プロジェクションで重ねると、次のようになります。
しかし、代わりに私はこれを取得します:
私の質問は単純です:なぜですか?OpenGL ES 2.0 のブレンディングはこの効果を達成できませんか? (以前は OpenGL ES 1.1 で動作していました) 私が見逃している一般的なものはありますか? 私のテクスチャのプリマルチプライド アルファの問題でしょうか? もしそうなら、それは私のPNGまたは私がそれをロードしている方法で奇妙なことでしょうか? GLKTextureLoader を使用してテクスチャをロードしています。
私が間違っている可能性は非常に高いですが、フラグメント シェーダーに到達する前にアルファ ブレンディングが発生するため、シェーダーの問題ではないことは理解しています。私のシェーダーは、情報を直接渡すだけです。(もしかしてこれが問題?)
頂点シェーダー:
attribute vec4 position;
attribute vec2 texCoordIn;
varying vec2 texCoordOut;
uniform mat4 modelViewProjectionMatrix;
void main()
{
gl_Position = modelViewProjectionMatrix * position;
texCoordOut = texCoordIn;
}
フラグメント シェーダー:
varying lowp vec2 texCoordOut;
uniform sampler2D texture;
void main()
{
gl_FragColor = texture2D(texture, texCoordOut);
}
glBendFunc を次のように設定してみましたが、同じ結果が得られます。
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
ヒントや一般的なハングアップは大歓迎です。ありがとう!