1

常に変更/更新されるバッファーが与えられ、このバッファーのピクセルを画面にブリットする必要があります。私のテスト コードでは、ビットマップを読み取り、それをバッファーに格納しました。問題は、OpenGL を使用して画面にブリットするときに特定の色を無視したいということです。

現在私は使用しています:

glPushMatrix();
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glColor4f(1.0f, 1.0f, 1.0f, 0.0f);
unsigned char* Data = (unsigned char*)Buffer;

for (int I = Bmp.Height(); I > 0; --I)
{
    for (int J = 0; J < Bmp.Width(); ++J)
    {
        if (Data[0] != 0 && Data[1] != 0 && Data[2] != 0) //If the colour is black, we don't draw it..
        {
            glRasterPos2i(J, I);
            glDrawPixels(1, 1, GL_BGR, GL_UNSIGNED_BYTE, Data);

        }

        Data += Bmp.Bits() == 32 ? 4 : 3;

        if(Bmp.Bits() == 24)
            Data += (-Bmp.Width() * 3) & 3;
    }
}

glPopMatrix();
SwapBuffers(DC);
Sleep(1);

したがって、上記で私が持っているのは、データと呼ばれるバッファーポインターです。次に、高さと幅を指定してループします。色が黒の場合は描画しません。それ以外の場合はglDrawPixels、 と組み合わせて使用​​しglRasterPos2iて、一度に 1 ピクセルずつ画面に描画します。特定の色を除くすべてのピクセルを描画するより効率的な方法はありますか? テクスチャではなくバッファです。例として Bmp を使用しました。

4

1 に答える 1

0

Stencil バッファを使用できます。ピクセル シェーダーを使用してクロマ キーを実行する方法もいくつかあります。

于 2013-07-12T07:57:21.510 に答える