1

プログラムでのテクスチャの複数の描画に問題があります。

ブレンディングモードは

glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
glBlendEquation(GL_FUNC_ADD);

a-channel の値は cpu-code からシェーダーに渡されます。

precision highp float;

uniform sampler2D tShape;

uniform vec4      vColor;
uniform float     sOpacity;

varying vec4 texCoords;\n"

void main() {
    float a = texture2D(tShape, texCoords.xy).x * sOpacity;
    gl_FragColor = vec4(vColor.rgb, a);
}

以前に計算された

O = pow(O, 1.3);

最高の視覚効果のために。

黒の透明なキャンバス (0;0;0;0) に色 (0; 0; 0) で描画しますが、不透明度は非常に低くなります。

0.03 -> 0.01048
0.06 -> 0.0258
0.09 -> 0.0437
0.12 -> 0.0635
...

シミュレーターのように複数の描画を行った後、ポイントの色の最大値は (0;0;0;1) (黒、透明なし) になると思います。 ここに画像の説明を入力

しかし、デバイスではそうではありません: ここに画像の説明を入力

アイデアはありますか、なぜそうなのですか?

アップデート:

また、手動ブレンディングも正しく機能しません(標準との違いもあります)。

glBlendFunc(GL_ONE, GL_ZERO);

フラグメント シェーダー コード:

#extension GL_EXT_shader_framebuffer_fetch : require
precision highp float;

uniform sampler2D tShape;

uniform vec4      vColor;
uniform float     sOpacity;

varying vec4 texCoords;

void main() {
    float a = texture2D(tShape, texCoords.xy).x * sOpacity;
    gl_FragColor = vec4(vColor.rgb * a, a) + (gl_LastFragData[0] * (1.0 - a));
}

シミュレーターでの結果: ここに画像の説明を入力

デバイスでの結果: ここに画像の説明を入力

4

2 に答える 2

0

いくつかの実験の後、この問題は device のサポートされている精度にあることがわかりました。したがって、iPad Air では、この問題は iPad 4、3 よりも少ないように見えます。

于 2014-07-11T11:55:16.520 に答える