1

テクスチャの1つを反転させたいマルチテクスチャフラグメントシェーダを作成しましたが、これを行うと、テクスチャがすべてギザギザになります。この問題の解決策はありますか?

ジャギーボーダー

これは私のフラグメントシェーダーコードです:

void main(void)
{
    lowp vec4 camera = texture2D(texture0, destinationTexCoord);
    lowp vec4 viewfinder = texture2D(texture1, vec2(destinationTexCoord.x, 1.0 - destinationTexCoord.y));

    lowp vec4 result = mix(camera, viewfinder, viewfinder.a);
    gl_FragColor = result;
}

私が使用しているテクスチャフィルタリング:

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

いくつかの背景情報:フラグメントシェーダーでこれらのテクスチャをブレンドしているので(ブレンドコードを削除)、2番目の平面を回転させてフレームバッファーにマージするソリューションを探していません。フラグメントシェーダーのテクスチャ座標を中心に反転/回転するのは良い考えではないかと思います。

最後に、「回転するかしないか」という統一された表現を渡します。その結果、1つのテクスチャが回転するかどうかが決まります。

4

1 に答える 1

1

destinationTexCoord に lowp の代わりに mediump を使用すると、vec2(destinationTexCoord.x, 1.0 - destinationTexCoord.y) 計算のサンプリング レートが向上します。ただし、依存テクスチャ読み取りを使用する代わりに、2 つの異なる vec2 を使用することをお勧めします。つまりcameraTexCoordviewfinderTexCoordです。フラグメント シェーダーでの mediump 計算を回避し、ハードウェアの (できれば) 最適化された vert-frag 補間を利用できます。

依存していない限り、テクスチャ座標に lowp を使用する理由はまったくありません。依存している場合は、lowp がフラグメント シェーダーの計算に適している可能性があります。それ以外の場合、私の経験では、lowp は何の利益ももたらしませんでした (ただし、iOS の PowerVR ハードウェアしか知りません)。

于 2012-08-30T18:33:30.437 に答える