1

16枚の描画をレンダリングするテクスチャがあります。テクスチャのサイズは1024x1024で、それぞれ256x256ピクセルの4x4の「スロット」に分割されています。

新しい図面をスロットにレンダリングする前に、古い図面が消去され、スロットが完全に透明になるようにクリアしたいと思います(alpha = 0)。

OpenGLでそれを行う方法はありますか、またはメモリ内のテクスチャピクセルに直接アクセスし、memset osltでそれらをクリアする必要がありますか?

4

2 に答える 2

1

テクスチャはフレームバッファターゲットとしてアクティブにバインドされていますか?(あなたがそれにレンダリングしているとあなたが言うので、私はイエスと仮定しています。)

その場合は、glScissorテストを設定し、続いglClearてフレームバッファの特定の領域をクリアすることができます。

于 2012-05-11T18:01:39.537 に答える
1

現在のテクスチャを通常どおり更新するだけだと思います。

std::vector<unsigned char> emptyPixels(1024*1024*4, 0); // Assuming RGBA / GL_UNSIGNED_BYTE
glBindTexture(GL_TEXTURE_2D, yourTextureId);
glTexSubImage2D(GL_TEXTURE_2D,
                0,
                0,
                0,
                1024,
                1024,
                GL_RGBA,
                GL_UNSIGNED_BYTE,
                emptyPixels.data());  // Or &emptyPixels[0] if you're stuck with C++03

すべてのピクセルを置き換えている場合でも、glTexSubImage2Dは新しいテクスチャを再作成するよりも高速です。

于 2012-05-11T18:00:25.340 に答える