1

フレーム バッファの使用 テクスチャをレンダリングすると上下逆に表示されますが、ここに頂点とテクスチャ座標があります。ちなみにフレームバッファを作成せずにレンダリングすると正しくテクスチャがレンダリングされます

private final float[] mVerticesData =
    { 
            -1f, 1f, 0.0f, // Position 0
            0.0f, 0.0f, // TexCoord 0
            -1f, -1f, 0.0f, // Position 1
            0.0f, 1.0f, // TexCoord 1
            1f, -1f, 0.0f, // Position 2
            1.0f, 1.0f, // TexCoord 2
            1f, 1f, 0.0f, // Position 3
            1.0f, 0.0f // TexCoord 3
    };

助けてください...ありがとう

4

2 に答える 2

4

2D テクスチャ イメージを OpenGL にアップロードする場合、通常はイメージが上から下にメモリ内にあるにもかかわらず、データが下から上に指定されることが想定されます。この問題を回避するために、テクスチャ座標を反転させたようです。

代わりに、OpenGL にアップロードする前にテクスチャ データを反転し、テクスチャ座標をそのまま維持する必要があります。これを行うと、画像テクスチャと FBO テクスチャの両方で同じテクスチャ座標が機能します。

したがって、解決策は、GLUtils.texImage2D を呼び出す前にビットマップを反転し、頂点を次のように書き込むことです。

private final float[] mVerticesData =
    { 
        -1f, 1f, 0.0f, // Position 0
        0.0f, 1.0f, // TexCoord 0
        -1f, -1f, 0.0f, // Position 1
        0.0f, 0.0f, // TexCoord 1
        1f, -1f, 0.0f, // Position 2
        1.0f, 0.0f, // TexCoord 2
        1f, 1f, 0.0f, // Position 3
        1.0f, 1.0f // TexCoord 3
    };
于 2012-08-08T11:48:36.840 に答える
1

ちなみにフレームバッファを作成せずにレンダリングすると正しくテクスチャがレンダリングされます

実際にはないと思います。すべての変換が頂点座標に一致する ID 座標とテクスチャ座標に設定されている場合、つまり S=X、T=Y の場合、OpenGL はテクスチャ データの原点が左下にあると想定します (別のビーストであるキューブ マップは例外です)。フレームバッファの色の添付ファイル、あなたの場合はテクスチャは、その規則に同意します。

テクスチャの T 座標は Y 頂点座標と逆平行です。つまり、すべて恒等変換の設定の場合、「上下逆さま」に反転します。

ただし、ほとんどの画像ファイル形式は左上の原点を想定しており、そのようなデータをそのまま OpenGL テクスチャにアップロードすると、別のフリップが追加され、テクスチャ座標のフリップと一緒に両方がキャンセルされます。

そのため、通常のテクスチャ コード パスが「反転」している可能性が非常に高くなります。

于 2012-08-08T09:55:57.947 に答える